ORA-00936:缺少表达问题

问题描述 投票:1回答:2

我是oracle sql的新手,我正在尝试运行以下查询,但遇到上述错误。

SELECT CONVERT(DATETIME,CASE WHEN DATEPART (Hour,  OrderTime) < 5 
                    THEN DATEADD(Day, -1, CONVERT(date, ordertime))
                    ELSE CONVERT(date, ordertime)
                    END) AS ItemOrderTradingDate FROM TBL_ITEM

请帮助。

sql oracle
2个回答
0
投票

您可以在下面的查询中尝试-

SELECT CASE WHEN EXTRACT(HOUR FROM OrderTime) < 5 
                 THEN TRUNC(ordertime) - 1
            ELSE TRUNC(ordertime)
       END AS ItemOrderTradingDate
FROM TBL_ITEM

0
投票

似乎您要从日期列中提取“小时”。如果是这样,请参见以下两个选项:

SQL> select ordertime,
  2         to_char(ordertime, 'hh24') hour_1,
  3         extract(hour from cast(ordertime as timestamp)) hour_2
  4  from tbl_item;

ORDERTIME           HOUR_1       HOUR_2
------------------- -------- ----------
06.04.2020 08:01:05 08                8

SQL>

运行Ankint查询时出现错误是因为extract-某些值(小时,分钟,秒)在时间戳而不是日期上起作用。


我不熟悉您使用的功能(convertdatepartdateadd),因此一旦找到了哪个小时,我就无法告诉您您真正想做什么。 dateadd似乎要从某些数据值中添加(或减去)1天。如果是这样的话,那就去做吧:日期算术(默认情况下)是按天完成的:

SQL> select sysdate right_now,
  2         sysdate + 1 tomorrow,
  3         sysdate - 1 yesterday
  4  from dual;

RIGHT_NOW           TOMORROW            YESTERDAY
------------------- ------------------- -------------------
06.04.2020 08:05:34 07.04.2020 08:05:34 05.04.2020 08:05:34

SQL>
© www.soinside.com 2019 - 2024. All rights reserved.