仅更新 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的主要内容,如果未能解决你的问题,请参考以下文章

python datetime64 转 datetime

MySQL 是不是会自动重新格式化插入到 DATETIME 类型列中的日期?

Python/Pandas/Datetime:将列中的整个列表转换为日期时间

oracle用一个空格更新一列中的多个空格

如何将两列中的日期和时间放入pandas to_datetime并设置为索引[重复]

如何检测 MySQL DATETIME 列中的连续小时数?