我正在尝试转换时间格式。数据库表中的时间以“ 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
答案 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