使用修剪后的字符串执行WHERE语句或JOIN ON

时间:2017-03-09 00:39:20

标签: sql sql-server string where trim

所以我尝试根据匹配字段连接两个表,但是有些条目有空格,可以是空格或制表符。但是,当我在修剪字段上执行连接时,它不起作用。这两种情况都不起作用:

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编译查询的方法。由于一些技术问题,我并不是真的可以使用Trimmed值更新。

一切都有帮助!谢谢!

1 个答案:

答案 0 :(得分:0)

所以,没有确定的答案。我最终将一些查询重构为视图而不是子选择,这似乎完成了这项工作。

我怀疑问题可能源于查询处理器如何工作的某种机制。调试似乎超出了我想做的事情。

Jereon Mostert建议使用CONVERT(VARBINARY(MAX),DOCUMENT_ID)来显示所有可能的隐藏字符。我最终只是替换了所有可能的空格。

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

虽然我认为可能有一种更清晰的正则表达式来处理它。

无论如何 - 使用SQL视图似乎可以完成这项工作。奇怪的东西。