我对oracle很陌生,我正在尝试运行下面的查询,但是遇到了上面提到的错误。
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请帮帮忙。
发布于 2020-04-06 06:05:49
似乎您希望从日期列中提取“小时”。如果是这样的话,请参见以下两个选项:
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>发布于 2020-04-05 23:25:11
你可以试试下面的查询-
SELECT CASE WHEN EXTRACT(HOUR FROM OrderTime) < 5
THEN TRUNC(ordertime) - 1
ELSE TRUNC(ordertime)
END AS ItemOrderTradingDate
FROM TBL_ITEMhttps://stackoverflow.com/questions/61050668
复制相似问题