我想在Oracle数据库中仅选择第1和第20个日期。 这是我的询问。
SELECT INVOICE_DATE
FROM invoice_debt@stilng1_lngrpt2
WHERE INVOICE_DATE = TO_DATE('01', 'DD')
AND INVOICE_DATE = TO_DATE('20','DD')
AND INVOICE_DATE > TO_DATE('30-12-2010', 'DD-MM-YYYY')
AND INVOICE_DATE IS NOT NULL GROUP BY INVOICE_DATE
ORDER BY INVOICE_DATE DESC;
我的查询运行:
但没有任何记录返回。
我尝试使用EXTRACT
获取DATE日期,但我无法使用WHERE
条款。
SELECT
EXTRACT(DAY FROM TO_DATE(INVOICE_DATE, 'DD-MM-YY')) as DAY_EXTRACT
FROM invoice_debt@stilng1_lngrpt2;
请帮帮我谢谢。 :)
答案 0 :(得分:2)
对日期使用OR条件,因为您不能将相同的invoice_date设置为第1天和第20天,并且也使用to_char作为发票日期,因为to_date只返回一个日期
SELECT INVOICE_DATE
FROM invoice_debt@stilng1_lngrpt2
WHERE (to_char(INVOICE_DATE, 'DD')='01'
OR to_char(INVOICE_DATE,'DD')='20')
AND INVOICE_DATE > TO_DATE('30-12-2010', 'DD-MM-YYYY')
AND INVOICE_DATE IS NOT NULL GROUP BY INVOICE_DATE
ORDER BY INVOICE_DATE DESC;
答案 1 :(得分:1)
提取(截止日期为_DATE(_发送日期=< 39; DD-MM-YY'))
这没有任何意义。您正在将DATE转换为DATE。我希望INVOICE_DATE
列是 DATE数据类型。所以只需从中提取一天 -
extract(day from INVOICE_DATE)
1st/20th
天选择需要 OR 条件, AND 条件需要条件TO_DATE('30-12-2010', 'DD-MM-YYYY')
来过滤日期。
但是,您需要确保您的查询使用有效的执行计划。
您需要在to_char(INVOICE_DATE, 'DD')
WHERE (to_char(INVOICE_DATE, 'DD')='01' OR to_char(INVOICE_DATE,'DD')='20') AND INVOICE_DATE > TO_DATE('30-12-2010', 'DD-MM-YYYY')) AND INVOICE_DATE IS NOT NULL
2010
的日期,我认为指定 RANGE 会使用日期列上的索引来获取 INDEX RANGE SCAN < /强> 您可以尝试这些建议并检查解释计划。