SQL SERVER中的一些奇怪的现象

本文列举了SQL Server中出现的一些不寻常的现象,包括平白无故在字符串后添加空格的问题,逗号被识别为货币分隔符导致的转换错误,以及SQL创建表时的语法细节。这些问题在不同SQL Server版本中表现各异,揭示了数据库操作中的潜在陷阱。
摘要由CSDN通过智能技术生成

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值