1

我有一个 SQL 查询,我在其中查询表中的特定数据,其中日期存储在数字列中。我正在使用以下查询将数值日期转换为实际日期,但我有数值为 0 的实例,这意味着开始日期是 2013 年 10 月 31 日,并且没有结束日期,这意味着 0是公开记录。有没有办法可以添加一个错误捕获,如果值为 0,则返回 0 或“打开”并继续?

 SELECT WMACCT# as 'Account #', CONVERT(Date, CONVERT(Varchar(8),OPENDT),104)
 as 'Open Date',

 CONVERT(Date, CONVERT(Varchar(8),CLDT),104)as 'Close Date'From 
 server.server 
4

2 回答 2

2

您可以使用 CASE WHEN 在日期为 0 时设置所需的值,并为剩余的值执行您正在执行的操作:

SELECT WMACCT# AS 'Account #',
  CASE 
    WHEN OPENDT = 0 THEN '2013-10-31'
        ELSE CONVERT(DATE, CONVERT(VARCHAR(8), OPENDT), 104)
    END AS 'Open Date',
  CASE 
    WHEN DATE = 0 THEN NULL
        ELSE CONVERT(DATE, CONVERT(VARCHAR(8), CLDT), 104)
    END AS 'Close Date'
FROM SERVER.SERVER
于 2013-11-15T00:44:20.570 回答
0

不,没有“错误捕获”。

您可以使用表达式来测试零值,并绕过数据类型转换:例如:

CASE WHEN OPENDT = 0 THEN NULL ELSE CONVERT(Date, CONVERT(Varchar(8),OPENDT),104) END

您可以返回 NULL。要让表达式返回一个'0'or 'Open',这与 ELSE 返回的 DATE 的数据类型不匹配。结果集中的列必须具有数据类型,它不能在某些行上返回 DATE,而在其他行上不能返回 VARCHAR。

于 2013-11-15T00:46:06.563 回答