2012-10-26 16 views
0

嘿,我有以下查詢:MS SQL REPLACE不顯示結果

SELECT REPLACE(REPLACE(REPLACE(REPLACE(tmpTable.Caller_Number,'-',''),'(',''),')',''),' ','') 
FROM tmpTable 
WHERE EXISTS 
(SELECT REPLACE(REPLACE(REPLACE(REPLACE(OnlineAppDetails.addPhone,'-',''),'(',''),')',''),' ','') 
FROM OnlineAppDetails 
WHERE OnlineAppDetails.addPhone = tmpTable.Caller_Number) 
ORDER BY GroupsBy ASC; 

它返回任何記錄......然而,當我做到這一點查詢:

SELECT * 
FROM tmpTable 
WHERE EXISTS 
(SELECT * FROM OnlineAppDetails 
WHERE SUBSTRING(OnlineAppDetails.addPhone,2,3)+'-'+SUBSTRING(OnlineAppDetails.addPhone,7,4)+SUBSTRING(OnlineAppDetails.addPhone,11,4) = tmpTable.Caller_Number) 
ORDER BY GroupsBy ASC; 

它返回的記錄。 。

的PHOME號碼的格式如下:

for OnlineAppDetails: (xxx) xxx-xxxx 
for   tmpTable: xxx-xxx-xxxx 

我所做的只是將電話號碼中的- ()和[space]取出,以確保我將所有記錄歸還給我。我知道這兩個表中都有匹配,因此取出- ()和[空間]仍應導致返回記錄。

更新

咄....知道這將是簡單的。

SELECT * 
FROM tmpTable 
WHERE EXISTS 
(SELECT * 
FROM OnlineAppDetails 
WHERE REPLACE(REPLACE(REPLACE(REPLACE(OnlineAppDetails.addPhone,'-',''),'(',''),')',''),' ','') = REPLACE(REPLACE(REPLACE(REPLACE(tmpTable.Caller_Number,'-',''),'(',''),')',''),' ','')) 
ORDER BY GroupsBy ASC; 

回答

1

爲了確保第一個查詢不會返回任何行:
那是因爲,內部查詢的WHERE OnlineAppDetails.addPhone = tmpTable.Caller_Number部分將產生零行(考慮到各自領域的預期格式),因此EXISTS將永遠是錯誤的。
注意BTW表示在SELECT部分對此(確實是任何)EXISTS子查詢所做的字符串操作不能對EXISTS謂詞的結果產生任何影響;這就是爲什麼使用的慣用語通常是:... WHERE EXISTS * FROM ...

第二個查詢查詢可以工作,因爲字符串轉換應用於WHERE子句中。此轉換使OnlineAppDetails.addPhone值具有與tmpTable.Caller_Number格式相同的格式,因此提供了查找匹配的機會。

+0

Gotcha。在OP中更正。 – StealthRT