SQL SERVER中的一些奇怪的现象

SQL SERVER中的一些奇怪的现象

一、平白无故多出一个空格

环境sqlserver2000 sp4+windowsxp sp3
if object_id('tb') <>0
  drop table tb
go
create table tb
( id varchar(10))

insert into tb
select 'a001'

 

select
             case when 1=2 then char(ascii(max(left(id,1)))+1)
                   else max(left(id,1)) end
              +right(cast(1000+count(*)+1 as varchar(4)),3)
        from tb

 

结果为 a 002,a后面多出一个空格。

对各个细节的测试结果:

select datalength(left(id,1)),                 --返回1,为a得长度
      datalength(max(left(id,1))),              --
返回1 ,为a的长度

      ascii(max(left(id,1))),                      --
返回97,为aascii

      datalength(ascii(max(left(id,1)))),        --
返回4,为aascii值(97)的长度,

      datalength(ascii(max(left(id,1)))+1),     --
返回4,为bascii值(98)的长度,

      datalength(char(ascii(max(left(id,1)))+1)),--
返回1,为b的长度

   datalength(case when 1=2 then char(ascii(max(left(id,1)))+1)else max(left(id,1)) end)  --
返回2,无论是case when中得条件 1=1,还是
1=2
from tb
group by id

 

可以看出在最后一个返回的数据长度为2,即’a ‘,很令人费解。注:在2005中没有该问题存在。

 

另外:此结论为FC所写,引用一下。

DECLARE @b varchar(10)

DECLARE @a char(1)

SET @b = 'bb'

SET

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值