SQL - 为什么要修剪参数

时间:2009-09-04 03:32:23

标签: sql trim

我有一个表(t),其中列(c)定义为varchar 20,包含值'a','b'和'c'

如果我执行以下sql,则返回一个值:

select * from table where c = 'a    '

为什么?

我认为它以某种方式投射/修剪参数,但为什么呢?

我如何真正搜索'a '

3 个答案:

答案 0 :(得分:1)

要将其与varchar列进行比较,您的字符串文字也必须是varchar类型。 Varchar会修剪额外的结束空白区域。它变化,因此是VARchar。普通的char类型不修剪空格,如果需要,实际上会在文字的末尾添加额外的空格。您可以检查这一点(并使用LEN()函数修复您的搜索:

 declare @a varchar(20) = 'a     '
 select * from t where c = @a and len(@a) = Len(c)

答案 1 :(得分:1)

指定尾随空格在ANSI SQL标准中以特殊方式处理:

http://support.microsoft.com/default.aspx/kb/316626

http://support.microsoft.com/kb/154886/EN-US/

对char和varchar来说,这种行为实际上是相同的。

答案 2 :(得分:0)

我使用了简单的解决方案:

declare @a varchar(20) = 'a     '
select * from t where c + '$' = @a  + '$'