黑马程序员技术交流社区

标题: sql语句 右面的空格问题 [打印本页]

作者: 杨楠    时间: 2011-11-21 17:12
标题: sql语句 右面的空格问题
本帖最后由 杨楠 于 2011-11-23 18:14 编辑

Id    Name    Age
1     tom      12
2     lily         3
select Age from Table where Name='lily                              这里是无数空格...         '
大家说说能否提出3来,为什么呢
作者: 杨楠    时间: 2011-11-21 17:18
在登陆论坛的时候,登陆QQ的时候,在我们的Id后面加上一大串空格,发现登陆成功。起初我认为是程序在读取我们Id的时候trim()了一把,现在看来又好象不是,SqlServer会自动忽略多余的空格么?上面的例子里,如果有第3条数据,名字是Lily加一个空格呢?
作者: 张振鹏    时间: 2011-11-21 18:04
能够提出3来,如果有第3条数据,名字是Lily加一个空格呢?会把这两条数据的年龄都打出来
我觉得是字段类型决定的,默认的把空格忽略了,
char类型的值长度不够时默认用空格补齐varchar、nvarchar的存储空间是可变的
如果存储的字符中间有空格就不能忽略了

作者: 杨楠    时间: 2011-11-21 18:17
偶当时也这样认为低,可是用varchar和char分别做了测试,结果都是一样的,全都被提了出来,而且,select len(Name) from Table where Name='lily                  ',提出来的字符串长度你猜会怎么样?
作者: 许前刚    时间: 2011-11-21 20:53
在Sql语句中,当数据类型为字符型时(如:char,nchar,varchar,nvarchar),默认会把字符后的空格忽略的,但是字符前面的和中间的空格不会忽略。
作者: 周敏_.net    时间: 2011-11-21 21:04
杨楠 发表于 2011-11-21 18:17
偶当时也这样认为低,可是用varchar和char分别做了测试,结果都是一样的,全都被提了出来,而且,select le ...

varchar类型的数据比较的时候会自动的过滤空格,而你的len(name)查询的应该是数据库里面的那个字符串长度,而不是你后面where name='lily   '的这个长度所以会输出4,
我也是通过百度出来的http://topic.csdn.net/u/20080506/15/195596bb-6fe0-436f-be5c-0dc69c83a2e8.html
http://topic.csdn.net/u/20100802/17/ed2b0d56-1bb6-4ddc-a5cc-2ce5f3391eb0.html
作者: 杨楠    时间: 2011-11-23 14:01
我实际的问题是:为什么select Age from Table where Name='lily                              这里是无数空格...         '
这句话可以把“lily”提出来呢?我的查询条件是lily加了一大堆空格啊,而数据库里的数据是varchar的没空格的lily,两个字符串明显不相等啊

作者: 杨楠    时间: 2011-11-23 18:13
许前刚 发表于 2011-11-21 20:53
在Sql语句中,当数据类型为字符型时(如:char,nchar,varchar,nvarchar),默认会把字符后的空格忽略的 ...

这样偶就懂了,顺便问一句,如果我就是想存储lily加空格怎么整呢,在后面加某种符号吧?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2