从 SQL Server 审核文件名获取日期

boo*_*ist 3 sql-server audit type-conversion

SQL Server 审核文件名使用以下模式:

Name_GUID_PartitionNumber_Timestamp.sqlaudit

下面是文件名示例:

Audit-ObjectChanges_2D94C1E8-CCAD-405F-A9F2-A45FA5EDAD8F_0_132327053636850000.sqlaudit

如果我查询,sys.dm_server_audit_status我会看到status_time对于我进行的四次审核,该列的值为 2020-04-30 08:29:22.6070000。所有文件名的时间戳部分均包含 132327053636850000。

所以我假设 132327053636850000 = 2020-04-30 08:29:22.6070000,但是如何将文件名时间戳转换为以前审核文件的日期时间格式?

谢谢

Mar*_*ith 6

1601-01-01这看起来像是自( FILETIME)以来的 100 纳秒刻度数

因此,基于以下工作(125911584000000000是 1601 到 2000 之间这些刻度的数量。首先将其减去以避免溢出int

返回的时间似乎也是 UTC,因此您需要转换为您当地的时区(我已经对此做出了假设)。

DECLARE @value    BIGINT = 132327053636850000,
        @datetime DATETIME2

SELECT @datetime = DATEADD(MILLISECOND, 
                           @value%10000000 / 10000, 
                             DATEADD(SECOND, 
                             ( @value - 125911584000000000 ) / 10000000, 
                             CAST('2000-01-01' AS DATETIME2)))

SELECT CONVERT(DATETIME2(3), 
                 SWITCHOFFSET(@datetime,
                 DATEPART(TZOFFSET, @datetime AT TIME ZONE 'GMT Standard Time'))) 
Run Code Online (Sandbox Code Playgroud)

退货

2020-04-30 08:29:23.685
Run Code Online (Sandbox Code Playgroud)