首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORACLE SQL SYSDATE和

ORACLE SQL SYSDATE和
EN

Stack Overflow用户
提问于 2021-12-13 06:40:00
回答 2查看 420关注 0票数 0

我正试图在SYSDATESYSDATE - 300之间得到一个约会。

代码语言:javascript
复制
SELECT date_entered
  FROM customer_order_join
 WHERE TO_CHAR(date_entered, 'YYYYMMDD') BETWEEN
       TO_DATE(sysdate, 'YYYYMMDD') AND TO_DATE(sysdate, 'YYYYMMDD') - 300

我得到了以下错误:

ORA-01858__:在需要数字的地方找到一个非数字字符。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-13 07:00:12

where子句中有一些奇怪的日期转换:

(

  1. To_Char(DATE_ENTERED,'YYYYMMDD')如果列已经是日期类型,只需使用该列而不进行任何转换,如果它是字符串,则使用TO_DATE.

  1. TO_DATE(SYSDATE,'YYYYMMDD') (不需要转换

  1. TO_DATE(SYSDATE,'YYYYMMDD')-300不需要转换

所以也许只是:

代码语言:javascript
复制
SELECT DATE_ENTERED FROM CUSTOMER_ORDER_JOIN
WHERE TRUNC(DATE_ENTERED) Between TRUNC(SYSDATE - 300) AND TRUNC(SYSDATE); 
票数 1
EN

Stack Overflow用户

发布于 2021-12-13 07:05:51

SYSDATE返回一个DATE值。永远不要对已经是TO_DATE()的值运行DATE。除此之外,BETWEEN ... AND还要求首先使用较低的日期。

您可以直接比较DATE值,我猜您正在查找以下内容:

代码语言:javascript
复制
SELECT DATE_ENTERED 
FROM CUSTOMER_ORDER_JOIN
WHERE DATE_ENTERED Between SYSDATE-300 AND SYSDATE

很可能您喜欢只比较日期值,而不是时间值。然后你可以用这个:

代码语言:javascript
复制
SELECT DATE_ENTERED 
FROM CUSTOMER_ORDER_JOIN
WHERE TRUNC(DATE_ENTERED) Between TRUNC(SYSDATE-300) AND TRUNC(SYSDATE) -- or TRUNC(SYSDATE)+1 to cover full day

注意,除非在DATE_ENTERED上有基于函数的索引,否则查询不会利用TRUNC(DATE_ENTERED)上的索引。所以你可能更喜欢

代码语言:javascript
复制
SELECT DATE_ENTERED 
FROM CUSTOMER_ORDER_JOIN
WHERE DATE_ENTERED >= TRUNC(SYSDATE-300) 
   AND DATE_ENTERED < TRUNC(SYSDATE)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70330800

复制
相关文章

相似问题

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