2016-11-19 106 views
1

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

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

为什么你不设定日期列与今天的日期自动填充(或任何给定的日期),并只需要将行导入为null。然后将日期字段返回到正常日期,并导入其余的日期?也许不如有光泽,但比试图找到正确的解决方案更快? – junkfoodjunkie

+0

你的代码应该可以工作。问题是什么? –

+0

这是错误消息:从字符串转换日期和/或时间时转换失败。 – Sam

回答

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上禁用了null。 [new_date]字段。由于日期字段只能接受并存储日期/时间/日期&时间/(实际空值)信息,因此文本“NULL”无效。

以下是MySQL

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

等效(虽然我不确定MySQL允许转换代码作为参数去CONVERT()

1

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 
+0

@JibinBalachandran,这是代码处理的内容,因此NULLIF –