2017-03-09 40 views
3

所以我試圖加入兩個表基於匹配的字段,但一些條目有空格,無論是空格或製表符。但是,當我在修剪的字段上執行連接時,它不起作用。這兩種情況都不工作:執行一個WHERE語句或JOIN ON與一個修剪的字符串

Select * FROM dbo.table 
WHERE replace(LTRIM(RTRIM(**DOCUMENT_ID**)), char(9), '') = 'AB10001' 

和:

Select * FROM dbo.table T1 
join dbo.table2 T2 
ON replace(LTRIM(RTRIM(**T1.DOCUMENT_ID**)), char(9), '') 
= replace(LTRIM(RTRIM(**T2.DOCUMENT_ID**)), char(9), '') 

子選擇裏面要繞過這一點,我甚至嘗試包裝。

Select * FROM (
    Select * FROM dbo.table 
) T 
WHERE replace(LTRIM(RTRIM(**T.DOCUMENT_ID**)), char(9), '') = 'AB10001' 

這些條件都不起作用。我是否錯過了SQL如何編譯查詢。由於一些技術問題,我並不是真正處於可以使用修整值進行更新的情況。

任何幫助!謝謝!

+0

請添加一些數據和預期結果。 –

+0

試過'WHERE column LIKE'%AB10001%'? – Squirrel

+0

是的,當然這是有效的,但它對於我正在寫的真實查詢更重要的聯接不起作用。我更奇怪爲什麼SQL子選擇修剪的字符串不起作用,以便我可以修復連接。 雖然謝謝! – iontom

回答

0

所以,沒有明確的答案。我最終將一些查詢重構爲視圖而不是子選擇,而這似乎完成了這項工作。

我懷疑這個問題可能來自於查詢處理器如何工作的一些機制。調試,似乎超出了我想做的事。

Jereon Mostert建議使用CONVERT(VARBINARY(MAX),DOCUMENT_ID)來顯示所有可能的隱藏字符。我最終只是對所有可用的空白字符進行了替換。

REPLACE(REPLACE(REPLACE(LTRIM(RTRIM(T.DocNumFormatted)), CHAR(10), ''), CHAR(13), ''), CHAR(9), '') 

雖然我想可能有一個更清潔的正則表達式來處理這個問題。

無論如何 - 使用SQL視圖似乎可以完成這項工作。奇怪的東西。