SQL Server日期存储为“ 2016年8月19日星期五01:00:00 GMT-0400”

时间:2018-08-30 16:12:16

标签: sql sql-server

我继承了一些表,并且某些假定的日期列中具有这种类型的值Fri Aug 19 2016 01:00:00 GMT-0400。如何将其转换为查询中的mm/dd/yyyy hh:mm

我尝试了很多事情,并且不断抱怨

  

无法从字符串转换为日期时间格式

谢谢!

3 个答案:

答案 0 :(得分:0)

听起来您的列不是日期时间,而是字符串。最好将这些列转换为datetime类型。但是您可以通过以下方式实现您的期望:

SELECT CONVERT(varchar, CONVERT(datetime, SUBSTRING(mydatecolumn,5,20)), 101) 
       + ' ' + 
       CONVERT(varchar, CONVERT(datetime, SUBSTRING(mydatecolumn,5,20)), 8)

答案 1 :(得分:0)

以下查询在SQL Server 2012中有效,并且不考虑UTC值

DECLARE @Input varchar(32), @Output VARCHAR(32)
SELECT @Input = 'Fri Aug 19 2016 1:00:00 GMT-400'
SELECT @Output = FORMAT(CONVERT(DATETIME, STUFF(STUFF(@Input, 1, 4, ''), PATINDEX('%[^0-9 :]%', LTRIM(SUBSTRING(STUFF(@Input, 1, 4, ''), PATINDEX('%[^A-Z]%', STUFF(@Input, 1, 4, '')), LEN(STUFF(@Input, 1, 4, ''))))) + PATINDEX('%[^A-Z]%', STUFF(@Input, 1, 4, '')), LEN(STUFF(@Input, 1, 4, '')), '')), 'MM/dd/yyyy HH:mm')
SELECT @Output

答案 2 :(得分:0)

如果“日期”字符串值具有相同的确切格式(即ddd mmm dd yyyy hh:nn:ss),则应执行以下操作:

DECLARE @Dt NVARCHAR(50) = 'Fri Aug 19 2016 01:00:00 GMT-0400'

SELECT
    CAST(CONVERT(VARCHAR(20), SUBSTRING(@Dt, CHARINDEX(' ', @Dt) + 1, LEN(@Dt)), 120) AS DATETIME)

https://stackblitz.com/edit/rxjs-toarray-problem-tpeguu