2013-01-08 120 views
27

我要選擇價值= 201301轉換日期爲YYYYMM格式

select getdate(), cast(datepart(year, getdate()) as varchar(4))+cast(datepart(MONTH, getdate()) as varchar(2)) 

返回20131

什麼是正常的方式做到這一點?

+0

欲瞭解更多信息,請查看此鏈接列表不同的日期格式sql服務器支持。 https://msdn.microsoft.com/en-us/library/ms187928.aspx –

回答

30
SELECT LEFT(CONVERT(varchar, GetDate(),112),6) 
61
SELECT CONVERT(nvarchar(6), GETDATE(), 112) 
+6

Upvotes for this answer!許多,許多upvotes! – Kermit

+0

這是非常優雅的解決方案!豎起大拇指 – Nightmaresux

+1

不錯,簡單。如果你想要的話,你也可以刪除unicode:'SELECT CONVERT(varchar(6),GETDATE(),112)' – jumxozizi

2

其實,這是適當的方式得到你想要的東西,除非你能使用MS SQL 2014(最終爲日期時間啓用自定義格式字符串)。

要獲得yyyymm而不是yyyym,你可以使用這個小竅門:

select 
right('0000' + cast(datepart(year, getdate()) as varchar(4)), 4) 
+ right('00' + cast(datepart(month, getdate()) as varchar(2)), 2) 

這比convert(..., 112) gettings零件更快,更可靠。

1

你可以把你的日期在多種格式,例如:

CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016 
CONVERT(NVARCHAR(10), DATE_OF_DAY, 3) => 15/09/16 

Syntaxe:

CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' *) 
  • 的代碼是一個整數,這裏3是沒有世紀第三格式化,如果你想要的世紀只是改變代碼爲103.

在你的情況,我剛轉換,並限制由nvarchar的尺寸(6)所示:

CONVERT(NVARCHAR(6), DATE_OF_DAY, 112) => 201609 

多見於:http://www.w3schools.com/sql/func_convert.asp

0

一種更有效的方法,使用整數運算,而不是串/ VARCHAR處理,這將導致一個int類型,而不是一個字符串類型是:

SELECT YYYYMM = (YEAR(GETDATE()) * 100) + MONTH(GETDATE()) 

添加兩個零到今年的右側,然後每月增加還增加了兩個零。