为什么SQL忽略字符串末尾的其他空格?

时间:2017-09-21 14:37:41

标签: sql sql-server tsql

我有一个代码

DECLARE @A VARCHAR(10) = 'A'
DECLARE @B VARCHAR(10) = 'A  '

IF(@A=@B)
    SELECT 'Equal'
ELSE
    SELECT 'Not Equal'

这里@A和@B不相等。

为了不忽略最后的额外空格,我试过

IF(REPLACE(@B,' ','.') = REPLACE(@A,' ','.')) 

我的问题是:

  1. 为什么SQL将它们视为平等?
  2. 还有其他方法吗?

1 个答案:

答案 0 :(得分:3)

@A和@B 相等。它们只是不一样:)当执行字符串比较时,SQL Server会将具有尾随空格的字符串的所有变体视为相等。此外,主动归类可以将其他字符串组合到该等价类中。

如果要以区分尾随空格的方式比较两个字符串,请使用like运算符。例如

select 1
where 'a' like 'a '

INF: How SQL Server Compares Strings with Trailing Spaces