如何在sql server中添加一个小时的时间戳(没有声明)

问题描述 投票:3回答:6

我想在参数TimeStamp中添加一个小时,但不能使用declare参数,即

DECLARE @datetime2 datetime2 = '2019-03-01T09:25:21.1+01:00'
                SELECT DATEADD(hour,1,@datetime)

我在表中有一个列名TimeStamp,我想添加所有数据加上1小时。

专栏

TimeStamp 
2019-03-01T09:25:20.1+01:00
2019-03-01T09:25:21.1+01:00
2019-03-01T09:25:19.1+01:00

我尝试这样的事情

SELECT DATEADD(hour,1, TimeStamp), but i have an error 

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

任何可能的答案?谢谢

sql-server dateadd
6个回答
1
投票

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

错误消息表示将TimeStamp列存储为字符串。 DATEADD需要一个有效的值,即date / datetime / datetime2,或者可以从字符串转换为它。因为样本值看起来像DATETIME2,所以可能需要这样的额外转换:

SELECT DATEADD(hour,1, CAST(TimeStamp as datetime2))

1
投票

SELECT DATEADD(小时,1,TimeStamp)是正确的

但是,TimeStamp中的格式错误,

所以,把它投到DateTime2 First

CAST(TimeStamp as DateTime2)

要么

CAST('2019-03-01T09:25:20.1+01:00' as DateTime2)

所以,

SELECT DATEADD(hour, 1, CAST(TimeStamp as DateTime2))

0
投票

您的语法定义正常。

它可能是您的列中无法解析为datetime2的值,因为它包含无效字符。您可以将ISDATE()添加到表达式以检查它是否有效。 https://docs.microsoft.com/en-us/sql/t-sql/functions/isdate-transact-sql?view=sql-server-2017

编辑:忘了提到你可以在使用try_cast或try_convert添加到datetime2之前解析


0
投票

在您的时间戳中,+ 01:00表示GMT的时间偏移。您可以将其转换为您当地的时间,然后使用DATEADD()添加小时

或从字符串中删除时间偏移量并使用DATEADD()添加一小时。如其他人所建议的那样。


0
投票

根据此https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-2017#date-and-time-styles,您必须使用类型127将时间戳转换为时区。

127是输入格式:

带有时区Z的ISO8601。

yyyy-mm-ddThh:mi:ss.mmmZ(无空格)注意:对于毫秒(mmm)值0,将不显示毫秒十进制值。例如,值“2012-11-07T18:26:20.000”将显示为“2012-11-07T18:26:20”。

select convert(datetime2, '2019-03-01T09:25:20.1+01:00', 127)

如果您不使用convert和127使用cast,您可能会在转换问题中运行,具体取决于用户的语言设置。


0
投票

也许你是在追求这个?

 select dateadd(hour,1,convert(datetimeoffset, TimeStamp))

最好不要将日期和时间存储为文本。

编辑:请注意,如果这对您很重要,他将保留您的时区信息。

© www.soinside.com 2019 - 2024. All rights reserved.