【发布时间】:2020-02-24 14:44:05
【问题描述】:
对于下面的查询,我试图根据当月的当天提取特定的日期范围。如果是 20 日或更少(例如“2/7/2020”),那么我想要 1 月的日期范围。否则,我想要二月的日期范围。是否可以通过案例陈述来完成?还是有更好的办法?
SELECT
account,
start_date,
amount
FROM
table1
WHERE
CASE
WHEN (
SELECT
CAST(EXTRACT(DAY FROM sysdate) AS NUMBER)
FROM
dual
) <= 20 THEN
start_date
BETWEEN '2020-01-01' AND '2020-01-31'
ELSE start_date BETWEEN '2020-02-01' AND '2020-02-29'
END
【问题讨论】:
-
附带说明:
(SELECT CAST(EXTRACT(DAY FROM sysdate) AS NUMBER) FROM dual)只不过是EXTRACT(DAY FROM sysdate)。start_date BETWEEN '2020-01-01' AND '2020-01-31'应该是start_date BETWEEN DATE '2020-01-01' AND DATE '2020-01-31'。结果是一个布尔值,如果 Oracle 在 SQL 中提供BOOLEAN,这将起作用,不幸的是它没有。