2016-07-28 82 views
1

這裏是什麼,我試圖做一個簡單的代碼片段:級聯裏面包含SQL Server功能

SELECT StreetNumber + StreetName AS 'Address' 
FROM TABLE 
WHERE CONTAINS('Address', 'Street Name') 

我意識到,我不能在這裏使用別名,因爲WHERE子句SELECT子句之前評估。

以下兩個備選方案也不起作用:

1)

SELECT Street_Number + StreetName AS 'Address' 
FROM TABLE 
WHERE CONTAINS(CONCAT(StreetNumber, '', StreetName), 'Street Name') 

2)

SELECT Street_Number + StreetName AS 'Address' 
FROM TABLE 
WHERE CONTAINS(StreetNumber + ' ' + StreetName), 'Street Name') 

我怎樣才能做到這一點?

+3

你究竟在做什麼?你知道「CONTAINS」是什麼嗎?即它是一個全文索引函數,並不等價於'string.Contains'? –

+0

如果地址是「主大街123號」,它應出現以下任一: 「主123街」 「主街」 「街123」 等 – Jake

+1

阿OK聽起來像你都知道呢。如果你希望string.contains的語義會更容易! –

回答

1

我通常用子查詢處理這個問題。我不喜歡像從選擇列表中CONCAT或ROW_NUMBER分配複製和粘貼代碼的條款,所以我會處理這樣的:

Select Address From 
(
    SELECT StreetNumber + StreetName AS 'Address' 
    FROM TABLE 
) A 
WHERE CONTAINS(Address, 'Street Name') 
-- Or maybe you really want WHERE Address Like '%Street Name%' 

我也認爲這是更容易閱讀/維護這些代碼。正如評論包含全文索引的作品,所以你真的可能正在尋找Charindex或Like。

+0

這將全文搜索字符串文字「街道名稱」而不是該列的值。 –

+0

@MartinSmith這是一個很好的觀點,但我確實有其他的邏輯來處理輸入參數的格式,而不是字符串文字「街道名稱」 - 我應該在之前澄清過。 JoeC爲了在這個連接的「地址」列上創建全文索引,我相信我需要創建一個視圖,然後在視圖中的列上創建全文索引,然後調整數據源內部查詢。 – Jake