【问题标题】:How to convert a blank string to blank date?如何将空白字符串转换为空白日期?
【发布时间】:2015-04-23 21:50:40
【问题描述】:

我有一列,数据类型是字符串,显示像'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 服务器显示错误:从字符串转换日期和/或时间时转换失败。 任何建议表示赞赏。

【问题讨论】:

  • "now I need to change the string to date, like '20140530'" 。您需要将其更改为 DateTime 列。

标签: sql-server string date


【解决方案1】:
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 

【讨论】:

    【解决方案2】:

    试试这个:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      • 2013-11-04
      • 2012-12-04
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多