仅更新 DATETIME 列中的 TZoffset
Posted
技术标签:
【中文标题】仅更新 DATETIME 列中的 TZoffset【英文标题】:Update Only TZoffset in DATETIME column 【发布时间】:2022-01-06 12:35:18 【问题描述】:我有一组日期,例如 2023-11-30 23:59:59.0000000 +00:00。我只想更新从 +00:00 到 +01:00 的时区偏移量。 如果它使事情变得更容易,那么所有时间都是 23:59:59.0000000,只有日期不同。
我试过了:
UPDATE Table SET Date = DATEADD(DAY, DATEDIFF(DAY, 0, Date), '2023-11-30 23:59:59.0000000 +01:00')
但它只能以高达秒的精度工作,没有毫秒、纳秒和 tzoffset。当我尝试这样做时,我遇到了这个错误:
从字符串转换日期和/或时间时转换失败。
【问题讨论】:
【参考方案1】:好像你想要TODATETIMEOFFSET
:
DECLARE @YourValue datetimeoffset(7) = '2023-11-30 23:59:59.0000000 +00:00';
SELECT TODATETIMEOFFSET(@YourValue,'+01:00');
这将返回2023-11-30 23:59:59.0000000 +01:00
。这是有效的,因为它获取您的 datetimeoffset
值并(隐式)首先将其转换为 datetime2
,这会截断偏移值,然后将新的偏移量添加到该值;因此不会改变实际时间而只是偏移量。
如果您说您实际上更改了值,以便日期和时间随着偏移量而变化,那么您需要SWITCHOFFSET
:
DECLARE @YourValue datetimeoffset(7) = '2023-11-30 23:59:59.0000000 +00:00';
SELECT SWITCHOFFSET(@YourValue,'+01:00');
这将返回2023-12-01 00:59:59.0000000 +01:00
。
【讨论】:
非常感谢!我是一个超级菜鸟,所以我使用了UPDATE Table SET Date = TODATETIMEOFFSET (Date, '+01:00')
,但它仍然有效! :)以上是关于仅更新 DATETIME 列中的 TZoffset的主要内容,如果未能解决你的问题,请参考以下文章
MySQL 是不是会自动重新格式化插入到 DATETIME 类型列中的日期?
Python/Pandas/Datetime:将列中的整个列表转换为日期时间