【问题标题】:Conversion date in SQLSQL中的转换日期
【发布时间】:2021-08-03 15:07:24
【问题描述】:

我在 SQL Server Management Studio 中遇到了日期问题。一列包含 2 种日期,例如:“20/06/2020”和“2021-03-25”。 该列具有 data_type varchar(10) 并且我必须转换为日期。我用过这个命令:

select cast(column_name as date) column_name
        from dataset

错误:

从字符串转换日期和/或时间时转换失败

我该如何解决?

【问题讨论】:

  • 你必须修复你的数据
  • 和架构。存储日期的列应该从不首先被创建为 varchar。
  • 您当前的dateformat 设置是什么

标签: sql sql-server


【解决方案1】:

您可以使用try_convert()coalesce()

select coalesce(try_convert(date, col),       -- flexible, handles many formats
                try_convert(date, col, 103)   -- handles dd/mm/yyyy
               )

注意:您可能有其他格式无法处理,因此这可能仍会返回 NULL

【讨论】:

    【解决方案2】:

    您可以检查内容并进行相应的转换:

    SELECT CASE WHEN column_name LIKE '%/%'
                THEN CONVERT(DATE, column_name, 103)
                ELSE CONVERT(DATE, column_name, 120)
           END AS ConvertedDate
    FROM DATASET
    

    有关可用的日期格式值,请参阅the docs

    【讨论】:

    • 可靠的方法,特别是如果 DMY 格式包含 / 。但是,我会使用 try_convert() 来避免引发错误。作为字符串,单元格中几乎可以有任何东西 +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多