【问题标题】:SQL - Converting String to Date and TimeSQL - 将字符串转换为日期和时间
【发布时间】:2017-05-05 13:52:45
【问题描述】:

我需要将值转换为 SQL Server DateTime

数据如下所示:

  • 20161021-12:55:16.000
  • 20161021-13:22:09.974

我试过了

CONVERT(DATE, '20161021-12:55:16.000', 102) 

它会引发错误。

我能否在 SQL 中获得帮助以将这些示例转换为有效的日期时间?

这些值也是 UTC。

我需要将它们转换为 EST。

感谢您的帮助。

【问题讨论】:

  • 格式号错误。看名单here

标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2


【解决方案1】:

如果你确信你的格式是一致的,那么你可以把那个破折号去掉(我用 datetime 来说明);

CONVERT(DATETIME, REPLACE('20161021-12:55:16.000','-',' '), 102) 

结果

2016-10-21 12:55:16.000

对于转换,您可以转换为日期时间,去掉您的小时数,然后转换为您想要的日期格式;

CONVERT(DATETIME, DATEADD(hh,-5,CONVERT(DATETIME,REPLACE('20161021-12:55:16.000','-',' '))), 102)

结果;

2016-10-21 07:55:16.000

为了更好地了解这一点,请将其设置在凌晨 5 点之前,您将获得前一天的信息;

CONVERT(DATETIME, DATEADD(hh,-5,CONVERT(DATETIME,REPLACE('20161021-04:55:16.000','-',' '))), 102)

结果

2016-10-20 23:55:16.000

作为参考,在我的测试系统上,您不需要转换为 102,这是默认设置。

DATEADD(hh,-5,CONVERT(DATETIME,REPLACE('20161021-04:55:16.000','-',' ')))

要动态获取时差,请执行以下操作;

DATEADD(hh,DATEDIFF(hh,GETUTCDATE(),GETDATE()),CONVERT(DATETIME,REPLACE('20161021-04:55:16.000','-',' ')))

【讨论】:

  • 视夏令时而定,为 4 或 5 小时。
  • @JohnCappelletti 好点,我已经更新了答案以动态执行此操作。
【解决方案2】:

不需要 CONVERT 102。

Select cast(replace('20161021-12:55:16.000','-',' ') as datetime)

返回

2016-10-21 12:55:16.000

从 UTC 转换为本地服务器。请注意,时差会随着夏令时 (EDT/EST)

而变化
Select DateAdd(MINUTE,DateDiff(MINUTE,GetUTCDate(),GetDate()),cast(replace('20161021-12:55:16.000','-',' ') as datetime))

返回

2016-10-21 07:55:16.000

【讨论】:

    【解决方案3】:
     SELECT CONVERT(datetime,SWITCHOFFSET(CONVERT(datetimeoffset, 
                                    REPLACE('20161021-12:55:16.000','-',' ')), 
                            DATENAME(TzOffset, SYSDATETIMEOFFSET()))) 
       AS ColumnInLocalTime
    

    【讨论】:

    • 这个答案将受益于您在其他答案之外所做的事情的解释。
    【解决方案4】:

    试试这个...

    select CONVERT(DATETIME, replace('20161021-12:55:16.000','-',' '), 102) 
    

    美国东部时间

    select dateadd(HH,-5,CONVERT(DATETIME, replace('20161021-12:55:16.000','-',' '), 102))
    

    【讨论】:

      猜你喜欢
      • 2019-04-12
      • 1970-01-01
      • 2021-01-05
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      • 2021-06-26
      相关资源
      最近更新 更多