果然如此,第一次发现,算不算SQL的BUG?

解决方案 »

  1.   

    呵呵。
    declare @s as char(15)
    set @s='33'
    set @s=   rtrim(@s) + '12'
    select @s
      

  2.   

    declare @s as varchar(15)
    set @s='33'
    set @s=@s + '12'
    select @s试试这个
    我认为是这样的
    首先你定义@s 为char(15)
    然后你赋值'33'后变成了'33     '最后有13个空格
    当你加上'12'后再赋给@s
    也要截断
    不信可以试试这个
    declare @s as char(15)
    declare @l as char(17)
    set @s='33'
    set @l=@s + '12'
    select @l
      

  3.   

    如果楼主将char(15)换成varchar(15)就不会出现这种问题了
      

  4.   

    不算SQL的BUG!declare @s as char(15)
    set @s='33'
    set @s=   @s + '12'--因为此时@s已为15长,在其后加啥都不会变的
    select @s把类型改了就可以了:declare @s as varchar(15)
      

  5.   

    猜猜看:(先不要试)
    Select 1 where cast('2003-10-10 00:00:00' as datetime)
    between cast('2003-10-09' as datetime) and cast('2003-10-09 23:59:59.999' as datetime)结果应该是什么?
      

  6.   

    txlicenhe(马可):这个问题我也遇到过,即系统会把2003-10-09 23:59:59.999当成2003-10-10 00:00:00,好象四舍五入了!后来发现毫秒的最后一位不是真实的值,如:Select cast('2003-10-09 23:59:59.995' as datetime),得到的是2003-10-09 23:59:59.997!最后用带毫秒的时间时毫秒只取两位算了!