通过仅传递 sql 中的部分日期来过滤时间戳中的数据
Filter data from timestamp by passing only part of date in sql
我想编写查询来过滤来自 table 的数据集,方法是仅将日期的一部分作为年份和月份或季度范围和年份传递
(部分日期)的传递值 -> 2021-4 或 Q1-2021
但在 table 中,日期存储为 01-APR-21 1222.36643100 PM ASIA/COLOMBO
我可以知道如何过滤数据吗?
我从这样过滤数据,但这不是我想要的。
-> Select * 来自 A where CAST(A.startDate as DATE) like '%-APR-21'
也许 EXTRACT 方法会有用。
例如你的情况:
Select * from A
where EXTRACT(MONTH FROM A.startDate) = 4
AND EXTRACT(YEAR FROM A.startDate) = 2021
用法
SELECT EXTRACT(<PART> FROM A.startDate);
选项 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')
上的 function-based 索引,第三个选项需要 EXTRACT(YEAR FROM start_date)
和 EXTRACT(MONTH FROM start_date)
上的两个 function-based 索引(或单个复合索引两者).
我想编写查询来过滤来自 table 的数据集,方法是仅将日期的一部分作为年份和月份或季度范围和年份传递 (部分日期)的传递值 -> 2021-4 或 Q1-2021 但在 table 中,日期存储为 01-APR-21 1222.36643100 PM ASIA/COLOMBO
我可以知道如何过滤数据吗? 我从这样过滤数据,但这不是我想要的。 -> Select * 来自 A where CAST(A.startDate as DATE) like '%-APR-21'
也许 EXTRACT 方法会有用。
例如你的情况:
Select * from A
where EXTRACT(MONTH FROM A.startDate) = 4
AND EXTRACT(YEAR FROM A.startDate) = 2021
用法
SELECT EXTRACT(<PART> FROM A.startDate);
选项 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')
上的 function-based 索引,第三个选项需要 EXTRACT(YEAR FROM start_date)
和 EXTRACT(MONTH FROM start_date)
上的两个 function-based 索引(或单个复合索引两者).