【问题标题】:How to convert VARCHAR datetime to DATETIME type to populate table如何将 VARCHAR 日期时间转换为 DATETIME 类型以填充表
【发布时间】:2013-01-14 16:56:24
【问题描述】:

我有一个带有 VARCHAR() 列的表,其值采用这种格式:

2012-10-05T11:14:00-04:00

我需要将此数据放入另一个表中,其中字段的数据类型为 DATETIME。

我将如何进行转换

2012-10-05T11:14:00-04:00

2012-10-05 11:14:00

?

我试过了:

CAST(LEFT(REPLACE(fieldtimestamp, 'T', ' '), 19) AS DATETIME)

但它一直给我错误:

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

【问题讨论】:

    标签: sql sql-server tsql datetime converter


    【解决方案1】:

    SELECT thedate, CAST( LEFT( REPLACE( thedate, 'T', ' ' ) , 21 ) AS DATETIME ) FROM MyTbl1

    如果你想要秒数,你需要写 21 个字母,

    thedate                     DATETIME
    2012-10-05T11:14:00-04:00   2012-10-05 11:14:00
    2012-10-05T11:14:00-05:00   2012-10-05 11:14:00
    

    mysql

    中运行良好

    【讨论】:

    • 为什么大家都想换T?它的存在是有原因的!
    【解决方案2】:

    如果您使用的是 MS SQL Server 2008,则可以使用 DATETIMEOFFSET 代替 DATETIME,它会起作用。

    BEGIN
    DECLARE @d DATETIMEOFFSET
    SELECT @d = '2012-10-05 11:14:00-04:00'
    END
    

    【讨论】:

      【解决方案3】:
      select CAST(LEFT(REPLACE('2012-10-05T11:14:00-04:00', 'T', ' '), 19) AS DATETIME)
      

      对我有用

      2012-10-05 11:14:00.000
      

      sql server 2012下

      【讨论】:

      【解决方案4】:

      这样可以: SELECT CONVERT(DATETIME,LEFT(fieldtimestamp,19),126)

      无需更换'T'

      【讨论】:

      • +1 删除T 甚至是一个非常糟糕的主意,因为这会使转换依赖于set dateformat
      • @MikaelEriksson 是的,我也这么认为。并且 op 没有通过明确提供格式来使用安全转换。但是,好吧,这是我的看法
      • 更多 here 了解使用 yyyy-mm-dd 日期格式而不在转换中指定格式时可能发生的情况。即使没有格式,使用T 也是安全的,因此您的答案是双重安全的:)。
      • SET LANGUAGE - 尝试SET LANGUAGE FRENCH 和任何一天> 12. 更多:sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      • 2019-08-26
      相关资源
      最近更新 更多