2016-05-16 28 views
3

我有以下查詢:SQL使用上多列的一個REPLACE

SELECT * FROM MailingList 

大約有20多個列在郵件列表表,一個被稱爲地址。此列有一些包含逗號的字段,我需要將其刪除。所以,我在我的查詢更新爲:

SELECT REPLACE(Address, ',', '') AS Address, * FROM MailingList 

但現在我有兩個地址列。有沒有辦法只顯示一個地址列,而仍然使用通配符(*)爲所有其他列?

+0

有沒有理由不能稱之爲「AddressNoCommas」或類似的東西? –

+0

最佳做法是避免選擇*並選擇您需要的列。 SSMS腳本輕鬆爲您提供Sql查詢。用*表示,否則不能有一個地址,但用正確的方式選擇列可以。 – shadow

+0

我經常希望這個,但它可能不是一個好主意......我所做的是使用SSMS,選擇top 1000來生成我的選擇列表並替換相關列。在你的情況下,用你的替換語句替換地址字段。至少可以保存所有的輸入。如果你不喜歡這種格式,你可以創建一個存儲過程來以你選擇的格式返回選擇列表。 –

回答

3

沒有辦法做到這一點,儘管列出你想明確的列是一個好主意。

1

你就可以欺騙如下查詢:

  1. 獲取數據到一個臨時表
  2. 丟棄不需要的
  3. 得到的結果和下降臨時表
的cloumns


SELECT *, REPLACE(Address, ',', '') AS Address2 
INTO #TempTable 
FROM MailingList 

ALTER TABLE #TempTable 
    DROP COLUMN [Address] 

SELECT * FROM #TempTable 
DROP TABLE #TempTable 
0

我同意陰影 - 避免使用通配符*如果你能...

我知道列明所有列在大表的SELECT語句是一種痛苦所以這裏是一個快速的捷徑您可能不知道:在SQL Server Management Studio中,瀏覽對象資源管理器並找到要從中選擇的表(MailingList)。右鍵單擊它以查看上下文菜單並選擇「Script Table as」,然後選擇「」,然後選擇「新建查詢編輯器窗口」。這將創建一個新的select語句,並列出每個列。將來,使用此方法創建選擇語句,查詢,過程等,而不是*通配符。性能更好,它看起來更好:-)

然後,你可以用替換函數解決你的別名問題。