【问题标题】:converting dates to datetime2将日期转换为 datetime2
【发布时间】:2021-03-03 06:37:58
【问题描述】:

在我的“示例”表中,我有一个“日期”列,它是 nvarchar,我想将其转换为 ISO 8601 datetime2 格式。

我现在的日期格式如下:

01-JAN-20 12.00.00.0000000AM

将其转换为ISO 8601 datetime2 格式的代码是什么?

【问题讨论】:

  • NEVERever 将日期或日期/时间值存储在 varchar 列中。你有机会修复那个损坏的数据模型吗?一旦它具有正确的数据类型,您就可以将其格式化为您喜欢的任何输出
  • 不幸的是,我无法修复它,因为我的任务是在不重新上传数据的情况下尽可能多地更改数据库中已有的内容(它有超过 200 万条记录......)
  • What is the code to convert this into ISO 8601 datetime2 format? 你试过在文档中查找吗?
  • @Squirrel - 我是一个新的 SQL,你是什么意思“将其转换为 ISO 8601 的代码是什么”?

标签: sql sql-server ssms sql-server-2017


【解决方案1】:

ISO 8601 是日期/时间值的字符串格式规范,而 datetime2 是内部二进制值。

要将 dd-mon-yy 格式的日期字符串转换为 datetime2 值,然后将该值格式化为 ISO 8601 日期/时间字符串,您可以使用:

FORMAT(CAST('01-JAN-20' AS datetime2), 'yyyy-MM-ddTHH:mm:ss.ffffff').

请注意,2 位数的年份不明确,将根据实例 2-digit year cut-off configuration 进行解释。

【讨论】:

  • 谢谢丹!如果我想转换整个列怎么办?我是否必须一一进行,因为我认为上述公式只会转换 01-JAN-20 的值?
  • @ageee9,我的回答中的 sn-p 只是一个例子。要实际更新表中的列值,请指定列名而不是文字:UPDATE dbo.YourTable SET DateColumn = FORMAT(CAST(DateColumn AS datetime2), 'yyyy-MM-ddTHH:mm:ss.ffffff');。这假设所有当前值都已正确格式化。否则,您将需要使用 TRY_CASTTRY_CONVERT 并决定要如何处理无效值。
【解决方案2】:

SQL Server 在无格式转换方面非常聪明。以下似乎有效:

select convert(datetime2, left('01-JAN-20 12.00.00.0000000AM', 9))

注意:这会将值置于午夜,因为您将值描述为“日期”,我假设它没有时间分量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 2021-05-26
    • 2022-12-02
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    相关资源
    最近更新 更多