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



是否可以在sqlserver 2012中的一列中获取最近一个月,年份(即2017年3月(和上个月,一年(即2017年2月(。

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

我想你想要它连续...也许像:

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() 替换为列名即可。

在 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()很好,但是...... - 亚伦·伯坦德

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

返回:

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

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

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;

这是它的演示

结果是:

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

最新更新