sql查询指定月份之前的几个月
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql查询指定月份之前的几个月相关的知识,希望对你有一定的参考价值。
参考技术A1、创建测试表,
create table test_date(id varchar2(20), v_date date);
2、插入测试数据
insert into test_date values(1, sysdate-30);
insert into test_date values(2, sysdate-40);
insert into test_date values(3, sysdate-60);
insert into test_date values(4, sysdate-80);
insert into test_date values(5, sysdate-90);
commit;
3、查询表中全量数据,select t.*, rowid from test_date t;
4、编写sql,查询指定月份之前的几个月;例如,查询当前时间前两个月的数据;
select t.* from test_date t where to_char(v_date,'yyyymm') = to_char(add_months(sysdate,-2), 'yyyymm');
获取最近 3 个月数据的 SQL 查询
【中文标题】获取最近 3 个月数据的 SQL 查询【英文标题】:SQL query for getting data for last 3 months 【发布时间】:2014-03-21 15:41:30 【问题描述】:如何获取今天的日期并将其转换为01/mm /yyyy
格式并从表中获取3 个月前交货月份的数据?表中已包含交货月份为01/mm/yyyy
。
【问题讨论】:
WHERE Convert(DATE,TableColumn)>= GETDATE()-90
??到目前为止,您尝试过什么吗?
为什么将日期存储为字符串?你应该把桌子修好。
月份从交货日期开始在表格中创建,格式为 01/mm/yyyy。这是为了以后php的易用性。因此,为了获得过去 3 个月的特定交付类型,我想获取今天的日期并将其转换为 01/mm/yyyy 格式,并在表中使用交付月份进行引用以获得至少 3 个月,包括当前月份数据.
我尝试选择前 3 名并按交货月份描述订购,但它让我成为该月前 3 名交货。所以我用了
日期部分(mm,获取日期)
【参考方案1】:
SELECT *
FROM TABLE_NAME
WHERE Date_Column >= DATEADD(MONTH, -3, GETDATE())
Mureinik 建议的方法将返回相同的结果,但这样做可以使您的查询受益于 Date_Column
上的任何索引。
或者您可以检查过去 90 天。
SELECT *
FROM TABLE_NAME
WHERE Date_Column >= DATEADD(DAY, -90, GETDATE())
【讨论】:
其实你可以用GETDATE()-90
代替DATEADD(DAY, -90, GETDATE())
@huMptyduMpty 但是 3 个月不一定是 90 天,因为几个月可能有 30 或 31 天(如果考虑到 2 月,甚至可能有 28 或 29 天)【参考方案2】:
最新版本的mysql不支持DATEADD,而是使用语法
DATE_ADD(date,INTERVAL expr type)
要获取最近 3 个月的数据使用情况,
DATE_ADD(NOW(),INTERVAL -90 DAY)
DATE_ADD(NOW(), INTERVAL -3 MONTH)
【讨论】:
DATE_ADD
完美运行! DATEADD
在 MySQL 中似乎不存在。【参考方案3】:
我会使用datediff
,而不关心格式转换:
SELECT *
FROM mytable
WHERE DATEDIFF(MONTH, my_date_column, GETDATE()) <= 3
【讨论】:
【参考方案4】:过去 3 个月
SELECT DATEADD(dd,DATEDIFF(dd,0,DATEADD(mm,-3,GETDATE())),0)
今天
SELECT DATEADD(dd,DATEDIFF(dd,0,GETDATE()),0)
【讨论】:
以上是关于sql查询指定月份之前的几个月的主要内容,如果未能解决你的问题,请参考以下文章