将2017-01-13T06:00:00Z时间格式转换为yyyy-mm-dd hh:mm:ss

时间:2019-01-08 17:25:20

标签: sql sql-server tsql time

我正在尝试转换时间格式。数据库表中的时间以“ yyyy-mm-ddThh:mi:ssZ”的格式存储在VARCHAR(50)列中。运行查询时,我希望时间格式为“ yyyy-mm-dd hh:mi:ss”。 (我不在乎时区调整。)我不明白为什么样式为120的GETDATE返回想要的内容,但是当我使用字段名称时,它什么都不做。

Sub SetFileReadOnly(strPath As String)

Dim o As Object
Dim fl As Object

Set o = CreateObject("scripting.filesystemobject")

Set fl = o.getfile(strPath)
fl.Attributes = 1

Set o = Nothing
Set fl = Nothing

End Sub

返回:

SELECT  
  PlateEffectiveFrom as Value_In_Table, 
  STUFF(CONVERT(VARCHAR(33),PlateEffectiveFrom, 120),20,4,'') as 'Gets_Rid_of_Z',  
  CONVERT(varchar(33), PlateEffectiveFrom, 120) AS Does_Nothing,
  CONVERT(varchar(33), GETDATE(), 120) AS Format_I_Want
FROM    dbo.TVLTagDetails13
WHERE   ID = 5

1 个答案:

答案 0 :(得分:1)

解决此问题的方法是,如果不需要时区数据,则将列的数据类型更改为DateTime2,如果需要时区数据,则将列的数据类型更改为DateTimeOffset。 假设无法完成此操作,您要做的是从"yyyy-mm-ddThh:mi:ssZ""yyyy-mm-dd hh:mi:ss"的简单字符串操作:

SELECT LEFT(REPLACE(PlateEffectiveFrom, 'T', ' '), 19) AS Format_I_Want
FROM dbo.TVLTagDetails13
WHERE ID = 5

此外,在评论中的对话之后-必须阅读:亚伦·贝特朗(Aaron Bertrand)的Bad habits to kick : choosing the wrong data type