日期:2014-05-18  浏览次数:20523 次

关于空格的查询
我的SQL语句如下
EmployeeNum是16位长度的VARCHAR类型

第一个查询条件是
select   *   from   cEmployee   where   EmployeeNum= 'ASD12                   '
第二个查询条件是
select   *   from   cEmployee   where   EmployeeNum= 'ASD12 '
第三个查询条件是
select   *   from   cEmployee   where   EmployeeNum= '                     ASD12 '

查询结果
1,2相同,表明字符串后面的空格在查询条件里不起任何作用
3和1,2不相同,表明字符串前面的空格是起作用的

请高人提点,为什么会这样???



------解决方案--------------------
varchar类型指定某个列或变量的字符值长度小于指定大小时,SQL Server不会将空格加到其后
即 'ASD12 '和 'ASD12 '是相同的结果
但是空格加到前面的话,就会有几个空格算几个
'ASD12 '和 ' ASD12 '就不会有相同的结果
------解决方案--------------------
当SET ANSI_PADDING ON 的时候,字符窜 'ASD12 '的存储会自动在其最后用空格填充至16位长度。
所以会有LZ的查询结果。
------解决方案--------------------
填充的长度是由该字段的长度决定的。