首页 > 数据库 > mysql教程 > SQL Server DATEADD:如何避免大整数时间戳的算术溢出?

SQL Server DATEADD:如何避免大整数时间戳的算术溢出?

Mary-Kate Olsen
发布: 2024-12-29 11:11:11
原创
621 人浏览过

SQL Server DATEADD: How to Avoid Arithmetic Overflow with Large Integer Timestamps?

大整数的 DATEADD 陷阱

使用大整数时间戳时,SQL Server 中的 DATEADD 函数可能会遇到限制。本文探讨了大整数值导致算术溢出错误的特定情况。

问题

考虑以下 SQL 语句,旨在将大的 JavaScript 时间戳转换为SQL 日期:

DATEADD(MILLISECOND, cast(569337307200000 as bigint) % 1000, DATEADD(SECOND, cast(569337307200000 as bigint) / 1000, '19700101'))
登录后复制

在 SQL Server 2008 上,执行此语句会导致“算术溢出错误将表达式转换为数据类型 int。”

解决方案

克服此错误的关键在于将 DATEADD 操作分解为更小的块。通过最初以较大的单位(例如秒或分钟)添加时间,然后添加剩余的毫秒,我们可以避免溢出。

例如,以下语句计算给定较长持续时间的开始时间(在milliseconds):

DATEADD(ms, -large_duration_ms%60000, DATEADD(minute, -large_duration_ms/60000, GETDATE()))
登录后复制

此示例首先从大持续时间中减去分钟,然后添加剩余的毫秒。这种方法可以确保中间计算不会溢出。

以上是SQL Server DATEADD:如何避免大整数时间戳的算术溢出?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板