首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORA-00936:缺少表达式问题

ORA-00936:缺少表达式问题
EN

Stack Overflow用户
提问于 2020-04-05 23:03:44
回答 2查看 90关注 0票数 0

我对oracle很陌生,我正在尝试运行下面的查询,但是遇到了上面提到的错误。

代码语言:javascript
复制
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

请帮帮忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-06 06:05:49

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

代码语言:javascript
复制
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天。如果是这样的话,那么只需执行它:日期算术(默认情况下)是按天完成的:

代码语言:javascript
复制
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>
票数 0
EN

Stack Overflow用户

发布于 2020-04-05 23:25:11

你可以试试下面的查询-

代码语言:javascript
复制
SELECT CASE WHEN EXTRACT(HOUR FROM OrderTime) < 5 
                 THEN TRUNC(ordertime) - 1
            ELSE TRUNC(ordertime)
       END AS ItemOrderTradingDate
FROM TBL_ITEM
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61050668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档