很奇怪!!

大力 2003-10-09 01:48:09
----------------------------
declare @s as char(15)
set @s='33'
set @s= '12' + @s
select @s

结果是 1233
-----------------------------
declare @s as char(15)
set @s='33'
set @s= @s + '12'
select @s

结果是 33
-----------------------------

怎解??

...全文
80 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
pbsql 2003-10-09
  • 打赏
  • 举报
回复
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!

最后用带毫秒的时间时毫秒只取两位算了!
txlicenhe 2003-10-09
  • 打赏
  • 举报
回复
猜猜看:(先不要试)
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)

结果应该是什么?

pbsql 2003-10-09
  • 打赏
  • 举报
回复
不算SQL的BUG!

declare @s as char(15)
set @s='33'
set @s= @s + '12'--因为此时@s已为15长,在其后加啥都不会变的
select @s

把类型改了就可以了:declare @s as varchar(15)
txlicenhe 2003-10-09
  • 打赏
  • 举报
回复
如果楼主将char(15)换成varchar(15)就不会出现这种问题了
伍子V5 2003-10-09
  • 打赏
  • 举报
回复
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

pengdali 2003-10-09
  • 打赏
  • 举报
回复
呵呵。


declare @s as char(15)
set @s='33'
set @s= rtrim(@s) + '12'
select @s
txlicenhe 2003-10-09
  • 打赏
  • 举报
回复
果然如此,第一次发现,算不算SQL的BUG?

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧