以下是问题的示例:
SELECT 'True'
WHERE 'Hello ' IN ('Hello', 'Goodbye', 'Hello ')
目前,它返回"True",因为SQL在比较VARCHAR时忽略尾部空格。在这个相关的问题中,这可以通过使用LIKE来解决,但是这在In条件下不起作用。
在使用IN条件时,我如何确保比较考虑尾部空格,特别是?
编辑:我的可接受值列表可以包括带有尾随空格的项。希望基本上比较精确的值(即"Hello"与"Hello’不匹配(
假设您的可接受值列表没有尾随空格,也许您可以使用:
SELECT 'True'
WHERE 'Hello ' IN ('Hello', 'Goodbye') AND 'Hello ' NOT LIKE '% '
您可以在搜索项的末尾添加一个非空格字符:
DECLARE @Terminator char(1) = '|';
SELECT 'True'
WHERE 'Hello ' + @Terminator IN ('Hello' + @Terminator , 'Goodbye' + @Terminator)
这将迫使比较考虑尾部空间,同时保持一切灼热。(我假设您希望使用IN
运算符左侧或右侧的列(
我能想到这个解决方案:
SELECT 'True'
WHERE reverse('Hello ') IN (reverse('Hello'), reverse('Goodbye'))
基本上,这会强制使用reverse
函数来比较字符串。
但下面Zohar的解决方案是最受性能驱动的解决方案。
SELECT 'True'
WHERE 'Hello '+'|' IN ('Hello'+'|', 'Goodbye'+'|')