2016-11-10 65 views
0

試圖輸出是這樣的:輸出年份和月份用繩子

2016,11

使用此:

SELECT 
CONVERT(VARCHAR(20),YEAR(GETDATE()) + ',' + MONTH(GETDATE())) AS YearMonth 

我缺少的東西轉換?因爲我收到此錯誤:

Conversion failed when converting the varchar value ',' to data type int.

感謝

+1

您正在使用哪個數據庫管理系統? –

+0

'YEAR()'和'MONTH()'都返回一個數字。您必須分別轉換它們才能在字符串連接中使用它們。這個錯誤是由於'YEAR(GETDATE())+','+ MONTH(GETDATE())',它被作爲總共的'CONVERT'的第二個參數... – Shnugo

+0

Khrys,有一個問題:一個月低於10?你期望* 2016,2 *或* 2016,02 *(見'02'中的前導零)? – Shnugo

回答

1

試試這個。

SELECT 
CONVERT(VARCHAR(20),YEAR(GETDATE())) + ',' + CONVERT(VARCHAR(20), MONTH(GETDATE())) AS YearMonth 
0

你缺少的MONTH()輸出轉換爲字符串。這裏有一種方法:

select datename(year, getdate()) + ',' + cast(month(getdate()) as varchar(255)) as YearMonth 

datename()很方便,因爲它返回一個字符串。不幸的是,在月份它返回的是月份的名稱,而不是數字。

你也可以這樣做:

select replace(convert(varchar(7), getdate(), 120), '-', ',') 

或者使用format()在SQL Server 2012+:

select format(getdate(), 'yyyy,MM') 
+0

我想你想用120而不是12來轉換...順便說一句:它是否一定要依賴分隔字符(如本例中的連字符)? – Shnugo

+0

@Shnugo。 。 。謝謝。我的目標是120或121。 –

0

您可以使用CONVERT與112達成無定界符( 「20161110」)。將其轉換爲VARCHAR(*6*)將隱含縮短當天。其中一種(大多數情況下爲正效應)副作用:您將得到一個低月份零填充(例如2016,04)。然後我用STUFF插入,

SELECT STUFF(CONVERT(VARCHAR(6),GETDATE(),112),5,0,',') 

如果你不喜歡的補零一個月,你可以在STUFF這樣更換0

DECLARE @d DATETIME={d'2016-04-05'}; 
SELECT STUFF(CONVERT(VARCHAR(6),@d,112),5,CASE WHEN MONTH(@d)<10 THEN 1 ELSE 0 END,',')