【问题标题】:Converting a custom date string into SQL datetime2将自定义日期字符串转换为 SQL datetime2
【发布时间】:2025-12-31 22:40:01
【问题描述】:

我必须将 CSV 文件加载到 SQL Server 2008 中的临时表中。CSV 文件中有一个列,其中包含格式为 11/04/2017 at 08:24:52 的日期字符串。如何解析此字符串并将其插入datetime2 列?

以下会导致预期的转换错误 - Conversion failed when converting date and/or time from character string.

  create table #temp
  (
    date_col datetime2(2),
    some_id varchar(20)
  )

  insert into #temp(date_col , some_id )
  values ('11/04/2017 at 08:24:52', '2323434')

【问题讨论】:

    标签: sql sql-server-2008 datetime2


    【解决方案1】:

    您只需删除at 以及其中一个空格,然后告诉 SQL Server 您的日期和月份采用哪种格式:

    select convert(datetime2, replace('11/04/2017 at 08:24:52',' at',''),103) -- 2017-04-11 08:24:52.0000000
          ,convert(datetime2, replace('11/04/2017 at 08:24:52',' at',''),101) -- 2017-11-04 08:24:52.0000000
    

    【讨论】:

    • 谢谢,replace 对我来说似乎比 STUFF 更优雅,所以我会接受你的回答。
    【解决方案2】:

    您可以使用stuff 删除atconvert 使用样式103(假设dd/mm/yyyy)或101(假设mm/dd/yyyy):

    DECLARE @Date varchar(30) = '11/04/2017 at 08:24:52'
    
    SELECT CONVERT(datetime2, STUFF(@Date, 12, 3, ''), 103)
    

    结果:

        11.04.2017 08:24:52
    

    【讨论】:

      最近更新 更多