将文本/格式错误的日期转换为SQL可读日期时间

时间:2016-12-22 20:40:23

标签: sql-server tsql datetime charindex

我有一个手动输入日期,如下所示:

Wed Dec 21 19:23:32 2016,servername.domain.name.com,Random-String-Of-Text-Goes-Here

很奇怪,我知道,我无法改变他们做事的方式。我的目标是将此日期转换为SQL Server将其视为日期的任何格式。通过令人厌恶的代码混乱,我设法将其归结为:

Dec 21 21:38:12 2016

substring(LEFT(FIELDVALUE, CHARINDEX(',', FIELDVALUE) - 1),5,LEN(LEFT(FIELDVALUE, CHARINDEX(',', FIELDVALUE) - 1)))

但现在的问题是时间是在日期和年份之间。

它将始终是一个3Digit月,空间2位数日,空间8位数时间,空间4位数年。

MON DD HH:MI:SS YYYY

同样,SQL识别为日期的任何格式都可以使用。我将这些字符串导入第二个数据库,每次使用Excel宏或其他东西都不起作用。我想象另一个charindex或者我会在那里,但我所拥有的已经是如此混乱我想知道是否有更好的方法来做到这一点。

1 个答案:

答案 0 :(得分:3)

如果我理解了您的问题,那么您希望从字符串中提取日期并重新格式化。

Declare @String varchar(max)='Wed Dec 21 19:23:32 2016 ,servername.domain.name.com,Random-String-Of-Text-Goes-Here'
Select Try_Convert(datetime,stuff(left(@String,charindex(' ,',@String)),1,4,'') )
  

<强>返回

2016-12-21 19:23:32.000

使用Format(),,您可以应用所需的格式

Declare @String varchar(max)='Wed Dec 21 19:23:32 2016 ,servername.domain.name.com,Random-String-Of-Text-Goes-Here'
Select Format(Try_Convert(datetime,stuff(left(@String,charindex(' ,',@String)),1,4,'') ),'MMM dd HH:mm:ss yyyy')
  

<强>返回

Dec 21 19:23:32 2016
  

编辑 - 使用表格

Declare @YourTable table (FieldName varchar(max))
Insert Into @YourTable values
('Wed Dec 21 19:23:32 2016 ,servername.domain.name.com,Random-String-Of-Text-Goes-Here'),
('Thu Dec 22 17:05:05 2016 ,servername.domain.name.com,Random-String-Of-Text-Goes-Here-and-here')

Select AsDate    = Try_Convert(datetime,stuff(left(FieldName,charindex(' ,',FieldName)),1,4,'') )
      ,Formatted = Format(Try_Convert(datetime,stuff(left(FieldName,charindex(' ,',FieldName)),1,4,'') ),'MMM dd HH:mm:ss yyyy')
 From @YourTable

返回

AsDate                     Formatted
2016-12-21 19:23:32.000    Dec 21 19:23:32 2016
2016-12-22 17:05:05.000    Dec 22 17:05:05 2016