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的主要内容,如果未能解决你的问题,请参考以下文章
如何从当前日期 PHP 获取最近 7 周、7 个月的日期范围?