Tsql -> 从今天开始过滤 6 个月的数据,表中的日期字段为 YYYYMM

Posted

技术标签:

【中文标题】Tsql -> 从今天开始过滤 6 个月的数据,表中的日期字段为 YYYYMM【英文标题】:Tsql -> filter data 6 months from today, date field in table is YYYYMM 【发布时间】:2017-03-30 18:00:29 【问题描述】:

我需要一些帮助。 目前是 2017 年 3 月。 如何提取 6 个月前从 2017 年 2 月到今年年底的所有记录。我表中的日期格式为 YYYYMM

这是我的sql语句

select columns from budget
where month_number > = DATEADD(MONTH, -6, CURRENT_TIMESTAMP);

我得到的输出如下:

+------------+-------+--------------+
| month_name | month | month_number |
+------------+-------+--------------+
| January    |     1 |       201601 |
| February   |     2 |       201602 |
| March      |     3 |       201603 |
| April      |     4 |       201604 |
| May        |     5 |       201605 |
| June       |     6 |       201606 |
| July       |     7 |       201607 |
| August     |     8 |       201608 |
| September  |     9 |       201609 |
| October    |    10 |       201610 |
| November   |    11 |       201611 |
| December   |    12 |       201612 |
| January    |     1 |       201701 |
| February   |     2 |       201702 |
| March      |     3 |       201703 |
| April      |     4 |       201704 |
| July       |     7 |       201707 |
| December   |    12 |       201712 |
+------------+-------+--------------+

我没有得到正确的输出。从 2016 年 1 月开始,我仍在获取数据。请帮忙

谢谢

【问题讨论】:

how do I extract all records 6 months ago from February 2017 until end of this year - 您能否说明一下您要选择的确切...这在书面上没有多大意义。请显示一些示例数据和期望的结果。 请明确各个字段的数据类型。是month_number char、varchar、nvarchar、int 还是别的什么??? john 得到了我想要的。 month_number 是 int 【参考方案1】:

或者..

declare @budget table (month_Number int)

insert @budget (month_number)
select 201601
union all
select 201602
union all
select 201702
union all
select 201705
union all
select 201709


select * from @budget
where month_number >= (YEAR(DATEADD(MONTH, -6, CURRENT_TIMESTAMP)) * 100) +  MONTH(DATEADD(MONTH, -6, CURRENT_TIMESTAMP));

【讨论】:

【参考方案2】:
 Select *
 From  Budget
 Where month_number>= convert(varchar(6),DATEADD(MONTH, -6, CURRENT_TIMESTAMP),112) 
 Order By month_number

如果 2012+

Select *
 From  Budget
 Where month_number>=  format(DATEADD(MONTH, -6, CURRENT_TIMESTAMP),'yyyyMM') 
 Order By month_number

返回

month_name  month   month_number
September   9       201609
October     10      201610
November    11      201611
December    12      201612
January     1       201701
February    2       201702
March       3       201703
April       4       201704
July        7       201707
December    12      201712

【讨论】:

约翰,这很好用。请向我解释一下,以便我理解。 @user396123 我们只是将您的 CURRENT_TIMESTAMP 转换为 INTEGER yyyymm 以针对您的 month_number 字段进行测试 例如,选择 cast(convert(varchar(6),DATEADD(MONTH, -6, CURRENT_TIMESTAMP),112) as int) 返回 201609 @user396123 请看What should I do when someone answers my question?

以上是关于Tsql -> 从今天开始过滤 6 个月的数据,表中的日期字段为 YYYYMM的主要内容,如果未能解决你的问题,请参考以下文章

最近 x 个月的排名查询

如何从当前日期 PHP 获取最近 7 周、7 个月的日期范围?

开始修行

我的开始

查询近7天,近1个月,近3个月每天的数据量,查询近一年每个月的数据量

刚找到工作就不知道怎么办了