【问题标题】:Queries on case when statement查询 case when 语句
【发布时间】:2011-11-19 17:54:46
【问题描述】:

在我插入 case when 语句期间,由于我的 case when,oracle 将在任何固定数字后面自动插入另一个“0”。

例如:

INSERT INTO test
            (test_date,
             testno,
             hours)
 SELECT '20-OCT-2010',
       '1234',
       CASE
         WHEN Extract(DAY FROM( endtime - starttime )) >= 1 THEN (
         Extract(DAY FROM(
                         endtime - starttime ))
         * 24 + Extract
         (HOUR FROM(
       endtime - starttime
       )) )
         WHEN starttime IS NULL
              AND endtime IS NULL THEN 0
         ELSE ( Extract(HOUR FROM( endtime - starttime )) )
       END
       ||''
       || CASE
            WHEN endtime IS NULL
                 AND starttime IS NULL THEN 0
            ELSE Extract(MINUTE FROM ( endtime - starttime )) / 60
          END AS hours
FROM   testtime 

我从上述语句执行的结果:

Test_Date         TestNo           Hours
20-OCT-2010        1234            140

预期结果:

Test_Date         TestNo           Hours
20-OCT-2010        1234            14

我的小时数据类型是数字 (4,2) 我的错误是因为如果分钟的开始时间和结束时间为空,它将自动在其后面添加一个“0”。即使我将'0'更改为null,它仍然会在后面添加0。

我可以知道还有另一种方法来放置“0”值吗?

谢谢

【问题讨论】:

    标签: sql oracle select insert


    【解决方案1】:

    您应该添加它们,而不是连接小时数和分钟数,除以六十。例如,3 小时 0 分钟是 3 + 0 = 3 小时,而不是 3 || 0 = 30 小时。

    换句话说,将您的||''|| 更改为+。

    【讨论】:

    猜你喜欢
    • 2021-09-13
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多