我正在尝试使用SYSDATE
和SYSDATE - 300
之间的来获取日期。
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:在需要数字的位置找到了一个非数字字符
SYSDATE
返回一个DATE
值。永远不要对已经是DATE
的值运行TO_DATE()
。除此之外,BETWEEN ... AND
首先需要较低的日期。
你可以直接比较DATE
的值,我想你正在寻找这个:
SELECT DATE_ENTERED
FROM CUSTOMER_ORDER_JOIN
WHERE DATE_ENTERED Between SYSDATE-300 AND SYSDATE
很可能你只喜欢比较日期值,而不喜欢比较时间值。然后你可以使用这个:
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)
上有基于函数的索引。所以你可能更喜欢
SELECT DATE_ENTERED
FROM CUSTOMER_ORDER_JOIN
WHERE DATE_ENTERED >= TRUNC(SYSDATE-300)
AND DATE_ENTERED < TRUNC(SYSDATE)
在where子句中有一些奇怪的日期转换:
-
To_Char(DATE_ENTERED,'YYYYMMDD'(如果该列已经是日期类型,则只使用该列而不进行任何转换;如果它是字符串,则使用TO_date。
-
截止日期(系统日期,'YYYYMMDD'(无需转换
-
截止日期(SYSDATE,'YYYYMMDD'(-300无需转换
所以可能只是:
SELECT DATE_ENTERED FROM CUSTOMER_ORDER_JOIN
WHERE TRUNC(DATE_ENTERED) Between TRUNC(SYSDATE - 300) AND TRUNC(SYSDATE);