首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过在sql中只传递部分日期来筛选时间戳中的数据

通过在sql中只传递部分日期来筛选时间戳中的数据
EN

Stack Overflow用户
提问于 2022-05-16 00:23:12
回答 2查看 33关注 0票数 0

我想写查询来过滤表中的数据集,只传递部分日期,如年份和月份或季度范围和年传递值(部分日期) -> 2021-4或Q1-2021,但在表日期中存储为01-APR-21下午亚洲/科伦坡。

我可以知道如何过滤数据吗?我像这样过滤数据,但这不是我想要的。->从其中选择*(A.startDate为日期),如'%-APR-21‘

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-16 07:30:41

选项1:使用日期范围

代码语言:javascript
运行
复制
SELECT *
FROM   A
WHERE  DATE '2021-04-01' <= start_date
AND    start_date < DATE '2021-07-01'

代码语言:javascript
运行
复制
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:截断到季度开始

代码语言:javascript
运行
复制
SELECT *
FROM   A
WHERE  DATE '2021-04-01' = TRUNC(start_date, 'Q')

选项3:使用EXTRACT

代码语言:javascript
运行
复制
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)上建立两个基于函数的索引(或者在这两个选项上都需要一个单一的复合索引)。

票数 0
EN

Stack Overflow用户

发布于 2022-05-16 00:58:39

也许提取方法是有用的。

例如,在您的案例中:

代码语言:javascript
运行
复制
Select * from A 
where EXTRACT(MONTH FROM A.startDate) = 4
AND EXTRACT(YEAR FROM A.startDate) = 2021

用法

代码语言:javascript
运行
复制
SELECT EXTRACT(<PART> FROM A.startDate);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72253083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档