在比较Varchars和尾随空格时,如何在SQL Server中使用IN条件



以下是问题的示例:

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'+'|')

相关内容

最新更新