【问题标题】:Tsql -> filter data 6 months from today, date field in table is YYYYMMTsql -> 从今天开始过滤 6 个月的数据,表中的日期字段为 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

标签: tsql date


【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 2016-03-28
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多