是否可以在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 ║
╚══════════════╝