为什么不会 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."
为什么尾随空白不会消失。我对两者都做了 len
,hq
比 rt
值少 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
我有一个 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."
为什么尾随空白不会消失。我对两者都做了 len
,hq
比 rt
值少 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