我想写查询来过滤表中的数据集,只传递部分日期,如年份和月份或季度范围和年传递值(部分日期) -> 2021-4或Q1-2021,但在表日期中存储为01-APR-21下午亚洲/科伦坡。
我可以知道如何过滤数据吗?我像这样过滤数据,但这不是我想要的。->从其中选择*(A.startDate为日期),如'%-APR-21‘
发布于 2022-05-16 07:30:41
选项1:使用日期范围
SELECT *
FROM A
WHERE DATE '2021-04-01' <= start_date
AND start_date < DATE '2021-07-01'或
SELECT *
FROM A
WHERE TIMESTAMP '2021-04-01 00:00:00 ASIA/COLOMBO' <= start_date
AND start_date < TIMESTAMP '2021-07-01 00:00:00 ASIA/COLOMBO'选项2:截断到季度开始
SELECT *
FROM A
WHERE DATE '2021-04-01' = TRUNC(start_date, 'Q')选项3:使用EXTRACT
SELECT *
FROM A
WHERE EXTRACT(YEAR FROM start_date) = 2021
AND EXTRACT(MONTH FROM start_date) IN (4, 5, 6)注意:虽然它们都能工作,但是只有选项1才会在start_date列上使用索引。第二个选项需要在TRUNC(start_date, 'Q')上建立一个基于函数的索引,第三个选项需要在EXTRACT(YEAR FROM start_date)和EXTRACT(MONTH FROM start_date)上建立两个基于函数的索引(或者在这两个选项上都需要一个单一的复合索引)。
发布于 2022-05-16 00:58:39
也许提取方法是有用的。
例如,在您的案例中:
Select * from A
where EXTRACT(MONTH FROM A.startDate) = 4
AND EXTRACT(YEAR FROM A.startDate) = 2021用法
SELECT EXTRACT(<PART> FROM A.startDate);https://stackoverflow.com/questions/72253083
复制相似问题