Serilog - 日志 table 中的时间戳具有时区,但被 SQL 服务器忽略
Serilog - Timestamp in log table has timezone, but ignored by SQL Server
当我将 TimeStamp
转换为 smalldatetime
时,T-SQL 似乎忽略了时区,因此看起来 +00:00 事件发生在未来。
在 SQL 语句中处理时间戳字段中的时区的正确方法是什么?
示例:
2021-09-16 13:05:00.3432122 +00:00
returns 2021-09-16 13:05:00
转换为 smalldatetime
时,实际发生在 9:05am
.
2021-09-16 09:05:08.7375111 -04:00
returns 正确的时间。
SELECT TOP(20)
Id, TimeStamp,
CAST(TimeStamp AS smalldatetime) AS TimeStampx
FROM
SerilogLogs
WHERE
Level = 'Error'
ORDER BY
Id DESC;
结果显示 +00:00 时间戳在转换为 smalldatetime
时未调整其时间:https://i.imgur.com/MweCHGt.png
看起来 Timestamp
colum 使用 DATETIMEOFFSET
类型。因此,您可能希望在将其转换为 SMALLDATETIME
:
之前使用 SWITCHOFFSET
函数
SELECT TOP(20)
Id, TimeStamp,
CAST(SWITCHOFFSET(TimeStamp, '-04:00') AS smalldatetime) AS TimeStampx
FROM
SerilogLogs
WHERE
Level = 'Error'
ORDER BY
Id DESC;
当我将 TimeStamp
转换为 smalldatetime
时,T-SQL 似乎忽略了时区,因此看起来 +00:00 事件发生在未来。
在 SQL 语句中处理时间戳字段中的时区的正确方法是什么?
示例:
2021-09-16 13:05:00.3432122 +00:00
returns 2021-09-16 13:05:00
转换为 smalldatetime
时,实际发生在 9:05am
.
2021-09-16 09:05:08.7375111 -04:00
returns 正确的时间。
SELECT TOP(20)
Id, TimeStamp,
CAST(TimeStamp AS smalldatetime) AS TimeStampx
FROM
SerilogLogs
WHERE
Level = 'Error'
ORDER BY
Id DESC;
结果显示 +00:00 时间戳在转换为 smalldatetime
时未调整其时间:https://i.imgur.com/MweCHGt.png
看起来 Timestamp
colum 使用 DATETIMEOFFSET
类型。因此,您可能希望在将其转换为 SMALLDATETIME
:
SWITCHOFFSET
函数
SELECT TOP(20)
Id, TimeStamp,
CAST(SWITCHOFFSET(TimeStamp, '-04:00') AS smalldatetime) AS TimeStampx
FROM
SerilogLogs
WHERE
Level = 'Error'
ORDER BY
Id DESC;