【问题标题】:Get last 6 months monthname.month number and Years in simple select statement在简单的选择语句中获取最近 6 个月的月名.月数和年数
【发布时间】:2015-12-21 11:04:15
【问题描述】:

如何在 sqlserver 的简单选择语句中获取最近 6 个月的月份名称、月份编号和年份。 月数是6,是固定的

12  Dec 2015
11  Nov 2015
10  Oct 2015
9   Sep 2015
8   Aug 2015
7   Jul 2015
6   Jun 2015 

这应该处理年终边界

比如说,如果当前月份是 2016 年 2 月,那么结果应该是 2015 年的月份。

2   Feb 2016
1   Jan 2016
12  Dec 2015
11  Nov 2015
10  Oct 2015
9   Sep 2015
8   Aug 2015

【问题讨论】:

    标签: sql-server date


    【解决方案1】:

    您可以通过以下方式做到这一点:

    SELECT  MONTH(DATEADD(mm, -m, GETDATE())) AS m,
            LEFT(DATENAME(mm,  DATEADD(mm, -m, GETDATE())), 3) AS n,
            YEAR(DATEADD(mm, -m, GETDATE())) AS y
    FROM    (VALUES (0),(1),(2),(3),(4),(5),(6)) t(m) 
    

    输出:

    m   n   y
    12  Dec 2015
    11  Nov 2015
    10  Oct 2015
    9   Sep 2015
    8   Aug 2015
    7   Jul 2015
    6   Jun 2015
    

    【讨论】:

      【解决方案2】:

      试试这个

      ;with cte as
      (
      select 0 as num
      union all
      select num+1 from cte where num<6
      )
      select month(dates),datename(month,dates),year(dates)
      from 
      (
      select dateadd(mm,-num,datadd(dd,1,eomonth(getdate(),-1))) as dates
      from cte
      ) A
      

      SQL FIDDLE DEMO

      【讨论】:

        【解决方案3】:
        select datepart(m,GETDATE()) MonthNumber,left(datename(month,GETDATE()),3) as Month,year(GETDATE()) as Year union all
        select datepart(m,DATEADD(month,-1,GETDATE())) MonthNumber,left(datename(month,DATEADD(month,-1,GETDATE())),3) as Month,year(DATEADD(month,-1,GETDATE())) as Year union all
        select datepart(m,DATEADD(month,-2,GETDATE())) MonthNumber,left(datename(month,DATEADD(month,-2,GETDATE())),3) as Month,year(DATEADD(month,-2,GETDATE())) as Year union all
        select datepart(m,DATEADD(month,-3,GETDATE())) MonthNumber,left(datename(month,DATEADD(month,-3,GETDATE())),3) as Month,year(DATEADD(month,-3,GETDATE())) as Year union all
        select datepart(m,DATEADD(month,-4,GETDATE())) MonthNumber,left(datename(month,DATEADD(month,-4,GETDATE())),3) as Month,year(DATEADD(month,-4,GETDATE())) as Year union all
        select datepart(m,DATEADD(month,-5,GETDATE())) MonthNumber,left(datename(month,DATEADD(month,-5,GETDATE())),3) as Month,year(DATEADD(month,-5,GETDATE())) as Year union all
        select datepart(m,DATEADD(month,-6,GETDATE())) MonthNumber,left(datename(month,DATEADD(month,-6,GETDATE())),3) as Month,year(DATEADD(month,-6,GETDATE())) as Year
        

        上述查询适用于大多数 RDBMS。 对于 SQL Server 特定使用以下查询。

        SELECT  MONTH(DATEADD(month, -month, GETDATE())) AS MonthNumber ,
                LEFT(DATENAME(MONTH,  DATEADD(month, -month, GETDATE())), 3) AS MonthName,
                YEAR(DATEADD(month, -month, GETDATE())) AS Year
        FROM    ( VALUES (0), (1), (2), (3), (4), (5),(6) ) t ( month ) 
        

        【讨论】:

          【解决方案4】:

          试试 DATEADD:

          Select * FROM Table where YourDate>=DATEADD(m, -6, GETDATE())
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-12-01
            • 2014-05-12
            • 1970-01-01
            • 1970-01-01
            • 2016-12-28
            • 1970-01-01
            • 1970-01-01
            • 2016-09-03
            相关资源
            最近更新 更多