如果
select 1 where 'a '='a '
结果也是1,这可能说明了把它当场了varchar类型,后面的空格被忽略了
select 1 where 'a '='a '
结果也是1,这可能说明了把它当场了varchar类型,后面的空格被忽略了
解决方案 »
- 谁能算出来这个SUM?
- 存储过程问题,非常感谢
- 谁来给我说说关系除?我觉得挺难理解的
- sa密码自动被修改,所有作业全部停止。
- 如何让SQL SERVER 2005 登录名不区分大小写?
- 在SQL Server中,如何用语句实现:查询某字段的本行记录值如果等于上一行记录值,则本行值+1?
- 存储过程执行问题
- 麻烦sql老手帮我看看这句sql为啥这么慢?
- 请问用delphi编写的程序在调用SQL存储过程的时候如何显示执行过程?
- 请问一下大家:我熟悉PB,SQL SERVER,VB,VFP,不知道容易找到工作不?
- csl为扩展名的文件是什么文件,怎样打开?
- 用Execute方法后,如何获得记录集的个数????
declare @a varchar(200),@b varchar(200)
set @a='a'
set @b='a 'select len(@a),len(@b),@b+@aselect 1 where @a=@b
godeclare @a char(200),@b char(200)
set @a='a'
set @b='a 'select len(@a),len(@b)select 1 where @a=@b
/*
结果:1 1 a a(所影响的行数为 1 行)
-----------
1(所影响的行数为 1 行)
----------- -----------
1 1(所影响的行数为 1 行)
-----------
1(所影响的行数为 1 行)*/
那也不对呀,我的例子中 select len(@a),len(@b),@b+@a,@b+@a的值是有空格的,这说明没有rtrim(),要不是在判断的时候做rtrim()?
照这样的说法,rtrim函数也就没有存在的必要了。
see:
select 1 where ' a '=' a'
select 1 where ' a'=' a'
都没有得到结果,显然SQL Server知道它该做什么。
"那是因为SQL SERVER进行了隐式转换,把后面的空格去掉了"比较赞同pbsql(风云) 的观点,sql server在比较串大小的时候,可能首先要保证两者相同长度,sql server采取了以左边的expression为标准。
select len('a '),len('a ')
的结果竟然是
----------- -----------
1 1
select 1 where ' a '=' a'
select 1 where ' a'=' a'
没有结果,因为就是rtrim()了,也不等,所以不满足条件
改成
select 1 where ' a '=' a '
或者
select 1 where ' a '=' a '
就有结果了,不知道对不对/
LEN()
返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。汗颜,看来帮助还是要看仔细。