我是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
请帮助。
您可以在下面的查询中尝试-
SELECT CASE WHEN EXTRACT(HOUR FROM OrderTime) < 5
THEN TRUNC(ordertime) - 1
ELSE TRUNC(ordertime)
END AS ItemOrderTradingDate
FROM TBL_ITEM
似乎您要从日期列中提取“小时”。如果是这样,请参见以下两个选项:
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
-某些值(小时,分钟,秒)在时间戳而不是日期上起作用。
我不熟悉您使用的功能(convert
,datepart
,dateadd
),因此一旦找到了哪个小时,我就无法告诉您您真正想做什么。 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>