如何将空白字符串转换为空白日期?

时间:2015-04-23 21:50:40

标签: sql-server string date

我有一列,数据类型是字符串,显示记录如' 30MAY2014:00:00:00',有些行是空白的。现在我需要将字符串更改为日期,例如' 20140530',但空白行仍然将其保留为空白。我使用的是sql server 2012.这是我的查询:

select 
CONVERT(VARCHAR,substring(ColumnName,6,4)) 
         +RIGHT('0'+ (CONVERT(VARCHAR,(CASE substring(ColumnName,3,3)
                                  WHEN 'JAN' THEN 01
                                  WHEN 'FEB' THEN 02
                                   WHEN 'MAR' THEN 03
                                   WHEN 'APR' THEN 04
                                   WHEN 'MAY' THEN 05
                                   WHEN 'JUN' THEN 06
                                   WHEN 'JUL' THEN 07
                                   WHEN 'AUG' THEN 08
                                   WHEN 'SEP' THEN 09
                                   WHEN 'OCT' THEN 10
                                   WHEN 'NOV' THEN 11
                                   ELSE 12
                                  END))),2)
       + CONVERT(VARCHAR,substring(ColumnName],1,2)) 
FROM table

如果列中有记录,则表示正确,但空行显示12。 如何修改我的查询? 我还有一列,这个月的文件显示所有行都是空白的,我必须完成同样的工作。将空白字符串更改为空白日期,我尝试相同的查询,SQL服务器显示错误:从字符串转换日期和/或时间时转换失败。 任何建议都很感激。

2 个答案:

答案 0 :(得分:0)

试试这个:

SELECT CASE WHEN NULLIF(ColumnName, '') IS NULL THEN NULL ELSE
CONVERT(VARCHAR,substring(ColumnName,6,4)) 
         +RIGHT('0'+ (CONVERT(VARCHAR,(CASE substring(ColumnName,3,3)
                                  WHEN 'JAN' THEN 01
                                  WHEN 'FEB' THEN 02
                                   WHEN 'MAR' THEN 03
                                   WHEN 'APR' THEN 04
                                   WHEN 'MAY' THEN 05
                                   WHEN 'JUN' THEN 06
                                   WHEN 'JUL' THEN 07
                                   WHEN 'AUG' THEN 08
                                   WHEN 'SEP' THEN 09
                                   WHEN 'OCT' THEN 10
                                   WHEN 'NOV' THEN 11
                                   ELSE 12
                                  END))),2)
       + CONVERT(VARCHAR,substring(ColumnName],1,2)) END
FROM table

答案 1 :(得分:0)

save