【问题标题】:Extract portion of date string and convert to datetime in T-SQL提取日期字符串的一部分并在 T-SQL 中转换为日期时间
【发布时间】:2012-08-29 11:26:42
【问题描述】:

我在 64 位版本的 Windows Server 2008 R2 标准 (sp1) 上运行 SQL Server Standard 2008 R2

我已将日志文件作为平面文件源导入。在名为 big 的表中,导入中名为 col2 的列之一包含如下值:16/Mar/2007:11:30:17 as varchar(50)

我想将该列 (col2) 转换为 datetime 数据类型。

我尝试的一种方法是提取日期字符串的每个部分,然后重新组合并转换它们。

我遇到的问题是每列都有不同的宽度,因为日志文件不能被整齐地分隔,使得使用类似CHARINDEX 的东西返回一个数字或有时为 NULL。

我一直在尝试使用 CLR 集成使用正则表达式进行设置,但无法使其正常工作(我无法在 Visual Studio 中创建 C# 项目,没有选项)并且 Master Data Services 不会安装,因为 SQL Server 2008 R2 Standard 不支持它。

我最好的方法是什么?使用CASESUBSTRINGCHARINDEX

【问题讨论】:

    标签: tsql datetime sql-server-2008-r2 varchar


    【解决方案1】:

    试试这个

    DECLARE @d varchar(50) = '16/Mar/2007:11:30:17'
    
    SELECT CAST(STUFF(@d,CHARINDEX(':',@d),1,' ')  AS DATETIME)
    

    【讨论】:

      【解决方案2】:

      虽然我喜欢 EricZ 的想法,但这是我的解决方案

      DECLARE @d varchar(50) = '16/Mar/2007:11:30:17'
      SELECT CAST( LEFT(@d,PATINDEX('%:%',@d) - 1) + ' ' +  SUBSTRING(@d,PATINDEX('%:%',@d) + 1,LEN(@d)) AS DATETIME)
      

      【讨论】:

        【解决方案3】:
        select convert(datetime, 
               SUBSTRING('16/Mar/2007:11:30:17', 0, CHARINDEX(':', '16/Mar/2007:11:30:17')) + ' ' +
               SUBSTRING('16/Mar/2007:11:30:17', CHARINDEX(':', '16/Mar/2007:11:30:17') + 1, 8) , 1)
        

        【讨论】:

          【解决方案4】:

          试试这个>

          select convert(datetime,STUFF(big,CHARINDEX(':',big),1,' '),101) from yourtable
          

          示例:这里检查为数据时间字符串格式。如果相同,它将起作用

          DECLARE @d varchar(50) = '16/Mar/2007:11:30:17'
          select convert(datetime,STUFF(@d,CHARINDEX(':',@d),1,' '),101)
          

          【讨论】:

          • 嗯,我试过这个,把它剪裁为:select convert(datetime,STUFF(col2,CHARINDEX(':',col2),1,' '),101) from big,得到:“Msg 241, Level 16, State 1, Line 1 从字符串转换日期和/或时间时转换失败。”
          猜你喜欢
          • 2013-02-24
          • 2018-07-08
          • 2019-04-12
          • 2017-10-15
          • 2013-09-19
          • 2018-11-03
          • 1970-01-01
          • 2019-08-31
          • 2018-03-11
          相关资源
          最近更新 更多