【问题标题】:SQL Numeric to Date (with an exception)迄今为止的 SQL 数字(有一个例外)
【发布时间】:2013-11-15 00:39:35
【问题描述】:

我有一个 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 

【问题讨论】:

    标签: sql datetime numeric


    【解决方案1】:

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

    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
    

    【讨论】:

    • 这太完美了!我把它编辑成我需要的,它很棒!我试图投票/标记为最佳答案,但我没有代表
    • @Dakota。很高兴它起作用了:)。你不能在 15 代表之前投票。要接受它,您必须在发布问题后等待 15 分钟。
    【解决方案2】:

    不,没有“错误捕获”。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-06
      • 2018-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      • 1970-01-01
      相关资源
      最近更新 更多