以下是问题的一个示例:
SELECT 'True'
WHERE 'Hello ' IN ('Hello', 'Goodbye', 'Hello ')
当前返回“ True”,因为在比较VARCHAR时SQL会忽略尾随空格。在this related question中,可以使用LIKE解决此问题,但是在IN条件下无法使用。
在使用IN条件时,如何确保比较考虑到尾随空格, 具体 ?
编辑: 我的可接受值列表可以包含带尾随空格的项目。希望从本质上比较精确值(即“ Hello”与“ Hello”不匹配)
答案 0 :(得分:2)
假设您的可接受值列表不没有尾随空格,也许您可以使用:
SELECT 'True'
WHERE 'Hello ' IN ('Hello', 'Goodbye') AND 'Hello ' NOT LIKE '% '
答案 1 :(得分:1)
您可以在搜索项目的末尾添加一个非空格字符:
DECLARE @Terminator char(1) = '|';
SELECT 'True'
WHERE 'Hello ' + @Terminator IN ('Hello' + @Terminator , 'Goodbye' + @Terminator)
这将迫使比较在将所有内容保持可区分的同时考虑尾随空格。 (我假设您想在IN
运算符的左侧或右侧使用列)
答案 2 :(得分:1)
我可以想到这个解决方案:
SELECT 'True'
WHERE reverse('Hello ') IN (reverse('Hello'), reverse('Goodbye'))
基本上,这会强制使用reverse
函数比较字符串。
但是Zohar下面的解决方案是大多数性能驱动的解决方案。
SELECT 'True'
WHERE 'Hello '+'|' IN ('Hello'+'|', 'Goodbye'+'|')