我有一个手动输入日期,看起来像这样:
星期三12月21日19:23:32 2016,servername.domain.name.com,随机弦乐 - goes-goes-goes-here
这很奇怪,我知道,我无法改变他们在做事的方式。我的目标是将此日期纳入SQL Server认为是日期的任何格式。通过令人作呕的代码混乱,我设法将其降低到:
12月21日19: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,我会在那里,但是我已经有一团糟,我想知道是否有更好的方法可以做到这一点。
如果我明白的话,您的问题,您希望从字符串中提取日期并重新格式化。
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
且使用格式(),您可以应用所需格式
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