2017-03-09 22 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视图似乎可以完成这项工作。奇怪的东西。

相关问题