所以我尝试根据匹配字段连接两个表,但是有些条目有空格,可以是空格或制表符。但是,当我在修剪字段上执行连接时,它不起作用。这两种情况都不起作用:
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值更新。
一切都有帮助!谢谢!
答案 0 :(得分:0)
所以,没有确定的答案。我最终将一些查询重构为视图而不是子选择,这似乎完成了这项工作。
我怀疑问题可能源于查询处理器如何工作的某种机制。调试似乎超出了我想做的事情。
Jereon Mostert建议使用CONVERT(VARBINARY(MAX),DOCUMENT_ID)来显示所有可能的隐藏字符。我最终只是替换了所有可能的空格。
REPLACE(REPLACE(REPLACE(LTRIM(RTRIM(T.DocNumFormatted)), CHAR(10), ''), CHAR(13), ''), CHAR(9), '')
虽然我认为可能有一种更清晰的正则表达式来处理它。
无论如何 - 使用SQL视图似乎可以完成这项工作。奇怪的东西。