算术溢出转换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')

最新更新