是否有可能在sqlserver的一列中获取最近的月,年和上个月,年

时间:2017-03-23 17:07:25

标签: sql-server-2012

是否有可能在sqlserver 2012的一栏中获得最近一个月,一年(即2017年3月)和上个月,即年(即2017年2月)。

|Month & Year|
---------------
| March2017  |
| February2017|

3 个答案:

答案 0 :(得分:1)

我认为你想把它排在一排......也许就像:

SELECT
   CONVERT(VARCHAR(16),DATENAME(month,GETDATE())) +
   CONVERT(VARCHAR(16),DATEPART(YEAR,GETDATE())) + 
   ' | ' +  
   CONVERT(VARCHAR(16),DATENAME(month,DATEADD(MONTH,-1,GETDATE()))) +
   CONVERT(VARCHAR(16),DATEPART(YEAR,DATEADD(MONTH,-1,GETDATE()))) 

否则你可以这样做:

SELECT
CONVERT(VARCHAR(16),DATENAME(month,GETDATE())) + CONVERT(VARCHAR(16),DATEPART(YEAR,GETDATE()))
UNION ALL
SELECT
CONVERT(VARCHAR(16),DATENAME(month,DATEADD(MONTH,-1,GETDATE()))) + CONVERT(VARCHAR(16),DATEPART(YEAR,DATEADD(MONTH,-1,GETDATE()))) 

只需将GETDATE()替换为您的列名称(如果要在表格中使用它)。

答案 1 :(得分:1)

在sql server 2012 +

中使用format()
select val='PrevMonth',dt=format(dateadd(month,datediff(month,0, getdate())-1,0),'MMMMMyyyy')
union all 
select val='CurrMonth',dt=format(dateadd(month,datediff(month,0, getdate())  ,0),'MMMMMyyyy')
union all 
select val='NextMonth',dt=format(dateadd(month,datediff(month,0, getdate())+1,0),'MMMMMyyyy')

format()可能会慢一点,请看一下:format() is nice and all, but… - Aaron Bertand

rextester演示:http://rextester.com/IWCV22529

返回:

+-----------+--------------+
|    val    |      dt      |
+-----------+--------------+
| PrevMonth | February2017 |
| CurrMonth | March2017    |
| NextMonth | April2017    |
+-----------+--------------+

答案 2 :(得分:0)

是的,有几种方法可以做到这一点。一个例子是:

SELECT DATENAME(MONTH,DATEADD(MONTH,-1*number,GETDATE())) + 
       DATENAME(YEAR,DATEADD(MONTH,-1*number,GETDATE())) [Month & Year]
FROM master.dbo.spt_values
WHERE type = 'P'
AND number <= 1;

Here is a demo

结果是:

╔══════════════╗
║ Month & Year ║
╠══════════════╣
║ March2017    ║
║ February2017 ║
╚══════════════╝