SQL Server監査ファイル名は、次のパターンを使用します。
Name_GUID_PartitionNumber_Timestamp.sqlaudit
以下のファイル名の例:
Audit-ObjectChanges_2D94C1E8-CCAD-405F-A9F2-A45FA5EDAD8F_0_132327053636850000.sqlaudit
クエリを実行するとsys.dm_server_audit_status
わかりましたstatus_time
列には、4つの監査で2020-04-30 08:29:22.6070000の値があります。すべてのファイル名のファイル名のタイムスタンプ部分に132327053636850000があります。
132327053636850000 = 2020-04-30 08:29:22.6070000と想定していますが、ファイル名のタイムスタンプを以前の監査ファイルの日時形式に変換するにはどうすればよいですか?
ありがとう
これは、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')))
戻り値
2020-04-30 08:29:23.685