sql - 将 2017-01-13T06:00:00Z 时间格式转换为 yyyy-mm-dd hh:mm:ss
问题描述
我正在尝试转换时间格式。数据库表的时间以“yyyy-mm-ddThh:mi:ssZ”的格式存储在 VARCHAR(50) 列中。运行查询时,我希望时间格式为“yyyy-mm-dd hh:mi:ss”。(我不关心时区调整。)我不明白为什么风格为 120 的 GETDATE 返回我想要的,但是当我使用字段名时它什么也不做。
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
回报:
Value_In_Table Gets_Rid_of_Z Does_Nothing Format_I_Want
2008-03-12T06:00:00Z 2008-03-12T06:00:00 2008-03-12T06:00:00Z 2019-01-08 11:16:41
解决方案
此问题的解决方案是将列的数据类型更改为DateTime2
如果您不需要时区数据,或者DateTimeOffset
如果您需要时区数据。假设这无法完成,您所做的是一个简单的字符串操作,以从"yyyy-mm-ddThh:mi:ssZ"
to获取"yyyy-mm-dd hh:mi:ss"
:
SELECT LEFT(REPLACE(PlateEffectiveFrom, 'T', ' '), 19) AS Format_I_Want
FROM dbo.TVLTagDetails13
WHERE ID = 5
此外,在评论中的对话之后 - 必须阅读:Aaron Bertrand 的坏习惯:选择错误的数据类型
推荐阅读
- angular - 使用 Cypress 更改 Angular Material 中的选项卡
- ssl - ssl 证书问题 (ERR_SSL_PROTOCOL_ERROR)
- javascript - Metafizzy Isotope Uncaught TypeError
- react-native - React Native Firebase 消息传递后台通知未打开应用程序
- flutter - Flutter 和 Sembast - 方法返回 null
- android - Gradle 的依赖缓存似乎已损坏或不同步
- c# - 当我尝试从上下文对象返回字符串时,我的辅助函数抛出错误
- python - Pyspark - 如何将转换后的列与原始 DataFrame 合并?
- python - 在登录页面中循环大量帐户的最快方法是什么
- python - 如何在 tkinter 中重置 StringVar