2015-04-23 125 views
0

我有一列,数据类型是字符串,显示'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 Server显示错误:从字符串转换日期和/或时间时转换失败。 任何建议都很感激。

+0

什么是空的日期? “ –

+0

”'现在我需要将字符串更改为日期,如'20140530''“** NO **。您需要将其更改为“DateTime”列。 –

回答

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 
0
select 
CASE WHEN ColumnName = '' 
    THEN '' 
    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