算术溢出转换 LDAP lastLogon
Arithmetic overflow casting LDAP lastLogon
我正在尝试使用以下代码将 LDAP lastLogon 值转换为 SQL DateTime 值:
DATEADD(MS, CAST(lastLogon AS BIGINT), '19700101')
其中 lastLogin 是用户最近登录的 AD 值。
我收到此错误:
Arithmetic overflow error converting expression to data type int.
我正在检查 null 并使用 ISNUMERIC。
我们是 运行 2008 R2。有什么想法吗?
您的 lastLogon
值太大,DATEADD()
接受 INT
值而不是 BIGINT
。
您可以通过多个步骤来解决此问题,将您的时间分成更大单位的更小块,即首先是秒,然后是毫秒:
DATEADD(MS,CAST(lastLogon AS BIGINT)%1000,DATEADD(SECOND, CAST(lastLogon AS BIGINT)/1000, '19700101'))
我认为 Week
是您迈出第一步的最大限度,因为一个月的毫秒数不适合 INT
,但我可能会坚持使用 DAY
为简单起见:
DATEADD(MS,CAST(lastLogon AS BIGINT)%(1000*60*60*24),DATEADD(DAY, CAST(lastLogon AS BIGINT)/(1000*60*60*24), '19700101'))
来不及了。但找到了解决方案
样本:
select dateadd(day,130787731801583080 / (60 * 10000000) / 1440 - (datediff(dd, '1/1/1900', dateadd(yy, 299, '1/1/1900'))), '1/1/1900')
我正在尝试使用以下代码将 LDAP lastLogon 值转换为 SQL DateTime 值:
DATEADD(MS, CAST(lastLogon AS BIGINT), '19700101')
其中 lastLogin 是用户最近登录的 AD 值。 我收到此错误:
Arithmetic overflow error converting expression to data type int.
我正在检查 null 并使用 ISNUMERIC。 我们是 运行 2008 R2。有什么想法吗?
您的 lastLogon
值太大,DATEADD()
接受 INT
值而不是 BIGINT
。
您可以通过多个步骤来解决此问题,将您的时间分成更大单位的更小块,即首先是秒,然后是毫秒:
DATEADD(MS,CAST(lastLogon AS BIGINT)%1000,DATEADD(SECOND, CAST(lastLogon AS BIGINT)/1000, '19700101'))
我认为 Week
是您迈出第一步的最大限度,因为一个月的毫秒数不适合 INT
,但我可能会坚持使用 DAY
为简单起见:
DATEADD(MS,CAST(lastLogon AS BIGINT)%(1000*60*60*24),DATEADD(DAY, CAST(lastLogon AS BIGINT)/(1000*60*60*24), '19700101'))
来不及了。但找到了解决方案 样本:
select dateadd(day,130787731801583080 / (60 * 10000000) / 1440 - (datediff(dd, '1/1/1900', dateadd(yy, 299, '1/1/1900'))), '1/1/1900')