SQL关于BIGINT数据类型的问题

nightgoblin 2012-05-18 11:28:40
bigint数据类型范围是–9 223 372 036 854 775 808~9 223 372 036 854 775 807
看下面的例子:

DECLARE @a BIGINT,
@b BIGINT ;
SET @a=900;
SET @b=20120512*10000+@a;
SELECT @b;
/*结果:
消息 8115,级别 16,状态 2,第 4 行
将 expression 转换为数据类型 int 时出现算术溢出错误。

*/

请问为什么会报错啊?@b没有超出范围啊,请高手解答下。
我想使@b=2012050120900 然后转换为时间类型‘201205120900’可以吗??
...全文
606 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
haitao 2012-05-18
  • 打赏
  • 举报
回复
先赋给一个int64变量,再乘
昵称被占用了 2012-05-18
  • 打赏
  • 举报
回复
DECLARE @a BIGINT,
@b BIGINT ;
SET @a=900;
SET @b=cast(20120512 as bigint)*10000+@a;
SELECT @b;

-- 结果
201205120900

常数默认认为是int
kangkang08 2012-05-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
bigint数据类型范围是–9 223 372 036 854 775 808~9 223 372 036 854 775 807
看下面的例子:
SQL code

DECLARE @a BIGINT,
@b BIGINT ;
SET @a=900;
SET @b=20120512*10000+@a;
SELECT @b;
/*结果:
消息 8115,级别 16,状态 2,……
[/Quote]

正解!
昵称被占用了 2012-05-18
  • 打赏
  • 举报
回复
直接写‘2012-5-12 09:00’不就可以了,何必用bigint转
nightgoblin 2012-05-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

SQL code
DECLARE @a BIGINT,
@b BIGINT ;
SET @a=900;
SET @b=cast(20120512 as bigint)*10000+@a;
SELECT @b;

-- 结果
201205120900

常数默认认为是int
[/Quote]
怎么把‘201205120900’这个转换为时间类型呢?得到‘2012-5-12 09:00’

34,873

社区成员

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

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