【问题标题】:Convert 'NULL' to Date in SQL在 SQL 中将“NULL”转换为日期
【发布时间】:2017-04-03 00:57:42
【问题描述】:

我的表中有一个名为startdate 的列。它是字符串格式。大多数字段为“NULL”。我正在将此列复制到另一个数据类型为“日期”的表中。 如何在 SQL 中将所有值从字符串转换为日期。 我试过这段代码:

INSERT INTO Destination_Table [new_date] 
SELECT CONVERT(DATE,[startdate],103) 
FROM Source_Table

【问题讨论】:

  • 为什么不将日期列设置为自动填充今天的日期(或任何给定的日期,就此而言),然后只导入带有 null 的行。然后将日期字段恢复为正常日期,并导入其余部分?没有那么闪亮,但也许比尝试找到正确的解决方案更快?
  • 您的代码应该可以工作。有什么问题?
  • 这是错误信息:从字符串转换日期和/或时间时转换失败。
  • 你用的是什么数据库?
  • Sam,在Source_Table中,是NULL的文本值(4个字符串,还是6个字符串'NULL'),还是0字符值(null)?跨度>

标签: sql string date type-conversion


【解决方案1】:

看起来您正在使用 MSSQL。如果您使用的是 MSSQL 2012,以下代码应该可以工作:

INSERT INTO Destination_Table [new_date] 
SELECT IIF([startdate] = "NULL", null, CONVERT(DATE,[startdate],103)) 
FROM Source_Table

这样做的目的是使用IIF() 方法检查[startdate] 的值,如果该值是文本“NULL”,则返回实际的null 值,该值可以在大多数字段中使用,除非您在 Destination_Table.[new_date] 字段上禁用 null。

由于Date字段只能接受和存储Date/Time/Date&Time/(实际为null)信息,文本“NULL”无效。

以下是 MySQL 的等价物

INSERT INTO Destination_Table [new_date] 
SELECT IF([startdate] == 'NULL', null, CONVERT(DATE,[startdate],103)) 
FROM Source_Table

(虽然我不确定 MySQL 是否允许将转换代码作为 CONVERT() 的参数)

【讨论】:

    【解决方案2】:

    nullif([startdate],'NULL') 返回 [startdate] 除非它等于 'NULL' 然后它返回 NULL(一个真正的 NULL,而不是字符串 'NULL')

    INSERT INTO Destination_Table [new_date] 
    SELECT CONVERT(DATE,nullif([startdate],'NULL'),103) 
    from   Source_Table
    

    出于学习目的,以下是一些结果相同的表达式:

    nullif(x,y)
    

    case when x=y then null else x end
    

    case x when y then null else x end
    

    【讨论】:

    • @JibinBalachandran,这是代码处理的内容,因此是 NULLIF
    猜你喜欢
    • 2020-10-03
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    • 2021-05-24
    相关资源
    最近更新 更多