为什么不会 Rtrim 清除空间(用于比较)

Why wont Rtrim clear spaces (for comparison)

我有一个 col,它是我需要比较的文本字段(我知道不再使用了)。 (说明字段是文本字段) Case when rtrim(cast(RT.INSTRUCTIONS as varchar(max))) = rtrim(cast(HQ.INSTRUCTIONS as varchar(max))) then 'TRUE' Else 'FALSE' end as INSTRUCTIONS.

RT.Instructions 中的值为 "Check the oil levels every 30 hours. " HQ.Instructions 中的值为 "Check the oil levels every 30 hours."

为什么尾随空白不会消失。我对两者都做了 lenhqrt 值少 1。 我在 varchar(60) 字段上也遇到了同样的问题。

可能有一个角色没有被拾取。也许以下内容将有助于找到该值。或者也许只是让你开始走上正确的道路。

DECLARE @Char INT = 0
DECLARE @Tab TABLE (Id INT, Chr VARCHAR(5), Instructions VARCHAR(MAX), c VARCHAR(MAX))
WHILE @Char < = 256
BEGIN
INSERT INTO @Tab
SELECT Id
      ,CONVERT(NVARCHAR,CHAR(@Char)) Chr
      ,CONVERT(NVARCHAR,RIGHT(RTRIM(rt.Instructions),1)) InstructionChar
      ,CONVERT(NVARCHAR,CHAR(CONVERT(int,@Char))) c
FROM YourTable
WHERE RIGHT(RTRIM(Instructions),1) LIKE '%'+CHAR(CONVERT(int,@Char))
  AND RIGHT(RTRIM(Instructions),1) NOT LIKE '[A-Za-z]'
  AND RIGHT(RTRIM(Instructions),1) NOT LIKE '[0-9]'
  AND RIGHT(RTRIM(Instructions),1) NOT LIKE '.'
  AND RIGHT(RTRIM(Instructions),1) NOT LIKE ']'
  AND RIGHT(RTRIM(Instructions),1) NOT LIKE ')'
  AND RIGHT(RTRIM(Instructions),1) NOT LIKE '"'
  AND RIGHT(RTRIM(Instructions),1) NOT LIKE '}'
  AND RIGHT(RTRIM(Instructions),1) NOT LIKE '/'
SET @Char = @Char + 1
END
SELECT DISTINCT *
FROM @Tab

抱歉:我还不能写评论

第一次尝试:

Case when left(rtrim(cast(RT.INSTRUCTIONS as varchar(max))),len(HQ.INSTRUCTIONS)) = rtrim(cast(HQ.INSTRUCTIONS as varchar(max))) then 'TRUE' Else 'FALSE' end as INSTRUCTIONS

检查是否有其他问题。

然后做:

SELECT ASCII(right(RT.INSTRUCTIONS,1))

确认尾部 space 是 "real" space :此查询应显示 32.

CHAR(32) => ' '

ASCII (' ') => 32

我打赌你会得到16O。 160 表示最后一个字符是不间断的 space 与 trim 函数无关...

如果是这样,您将必须构建一个标量函数,例如:

ALTER FUNCTION [dbo].[fn_Replace_NonBreakingSpace]
(
    @InputString varchar(max),
)
RETURNS varchar(MAX)
AS
BEGIN
    RETURN REPLACE(@InputString, char(160), char(32))
END

然后:

Case when rtrim(dbo.fn_Replace_NonBreakingSpace(RT.INSTRUCTIONS)) = rtrim(dbo.fn_Replace_NonBreakingSpace(HQ.INSTRUCTIONS)) then 'TRUE' Else 'FALSE' end as INSTRUCTIONS