2016-11-10 67 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,',')