【问题标题】:Update Only TZoffset in DATETIME column仅更新 DATETIME 列中的 TZoffset
【发布时间】: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。当我尝试这样做时,我遇到了这个错误:

从字符串转换日期和/或时间时转换失败。

【问题讨论】:

    标签: sql-server datetime timezone


    【解决方案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'),但它仍然有效! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多