首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当Epoch超过万亿秒时,在SQL Server中将epoch转换为DateTime时出错

当Epoch超过万亿秒时,在SQL Server中将epoch转换为DateTime时出错
EN

Stack Overflow用户
提问于 2013-05-24 13:29:33
回答 3查看 7.8K关注 0票数 3

我尝试了许多已经给出的将EPOCH转换为SQL Server datetime的答案。当纪元有十亿秒时,它们就会工作。但一旦它超过万亿大关,它就会破产!例如-->

代码语言:javascript
复制
1. SELECT dateadd(MCS,1351187877744,'1970-01-01')
2. SELECT dateadd(NS,1351187877744,'1970-01-01')
3. SELECT dateadd(NANOSECOND, 1351187877744, '1970-01-01 00:00:00.0000000')
4. SELECT convert(bigint, datediff(ss, '01-01-1970 00:00:00',1351187877744))

以上所有操作都会失败,并出现以下溢出错误:“算术溢出错误将表达式转换为数据类型int。”

有趣的是,当我在this site上输入这个日期时,它会返回正确的值。

有什么建议吗?如何以一种适用于任何量级(>万亿秒等)的时期的方式做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-24 14:06:36

试试这个-

MSDN :

DATEADD: number参数不能超过int的范围。在以下语句中,number的参数超出int的范围1。返回以下错误消息:“__Msg8115,Level 16,State 2,Line 1.将表达式转换为数据类型INT.时出现算术溢出错误。”

查询:

代码语言:javascript
复制
DECLARE 
      @Date DATETIME = '19700101'
    , @MaxInt INT = 2147483647 
    , @ms BIGINT = 1351187877744

WHILE @ms != 0 BEGIN

    SELECT @Date = DATEADD(ms, CASE WHEN @ms > @MaxInt THEN @MaxInt ELSE @ms END, @Date)
    SELECT @ms = CASE WHEN @ms - @MaxInt < 0 THEN 0 ELSE @ms - @MaxInt END

END

SELECT @Date

输出:

代码语言:javascript
复制
2012-10-25 17:57:57.533
票数 3
EN

Stack Overflow用户

发布于 2014-05-10 01:41:05

只需创建此函数

代码语言:javascript
复制
CREATE FUNCTION convertEpoch 
(@epochVal bigint) RETURNS datetime 
AS BEGIN DECLARE @Return datetime
SELECT @return = dateadd(s,@epochVal/1000,'1970-01-01')
RETURN @return END
票数 2
EN

Stack Overflow用户

发布于 2013-05-24 14:01:42

根据MSDN,其语法为:

代码语言:javascript
复制
DATEADD (datepart , number , date )

其中int是可以解析为添加到日期的日期部分的数字的表达式。用户定义的变量是有效的。

此外,为日期数据类型smalldatetimedatedatetime添加microsecondnanosecond的日期部分是不允许的

试试这个:

代码语言:javascript
复制
DECLARE @datetime2 datetime2 = '2007-01-01 13:10:10.1111111';

SELECT '50 nanoseconds', DATEADD(nanosecond,50,@datetime2)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16728211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档