2012-03-12 41 views
0

我試圖將兩個字符串放在我的列VALUE01和VALUE02中,然後搜索這個新列中是否存在搜索字符串。我嘗試了下面的兩個陳述。我收到錯誤說「無效的列名稱」完成「」。這些陳述有什麼問題?我使用MS SQL Server。SQL語句組合文本列錯誤

SELECT COALESCE(VALUE01, '') + COALESCE(VALUE02, '') AS Complete FROM dbo.Data WHERE Complete LIKE 'Test'" 

SELECT (VALUE01 + VALUE02) AS 'Complete' FROM dbo.Data WHERE Complete LIKE 'Test'" 
+0

什麼數據庫品牌? SQLSERVER? – danihp 2012-03-12 10:50:31

回答

3

您不能在WHERE子句中使用列別名。

嘗試:

SELECT COALESCE(VALUE01, '') + COALESCE(VALUE02, '') AS Complete 
FROM dbo.Data 
WHERE (COALESCE(VALUE01, '') + COALESCE(VALUE02, '')) LIKE 'Test'" 
+0

也許,對於性能問題,最好是:'其中VALUE01像'測試'或VALUE02像'測試'。你同意? – danihp 2012-03-12 10:53:21

+0

太棒了,你打我:) – 2012-03-12 10:54:03

+0

@danihp - 好點。我不確定是否誠實,可能值得包括SSMS的客戶統計和測試2個不同的查詢。 – Curt 2012-03-12 10:57:23

0

不能使用列別名在where子句中

下面的查詢應該做的事情,你需要

SELECT COALESCE(VALUE01, '') + COALESCE(VALUE02, '') AS Complete FROM dbo.Data WHERE COALESCE(VALUE01, '') + COALESCE(VALUE02, '') LIKE 'Test' 
1

除了生硬Amit的的方法,您也可以使用CTE或內聯視圖,並對結果進行查詢 - 例如:

SELECT * FROM 
(SELECT COALESCE(VALUE01, '') + COALESCE(VALUE02, '') AS Complete 
FROM dbo.Data) ILV 
WHERE Complete LIKE 'Test' 

(順便說一句,使用LIKE沒有通配符產生相同的結果,如果你曾經使用= - 檢查字符串Test是否在Complete組合柱出現在任何地方,你應該使用條件WHERE Complete LIKE '%Test%')。