试图输出是这样的:输出年份和月份用绳子
2016,11
使用此:
SELECT
CONVERT(VARCHAR(20),YEAR(GETDATE()) + ',' + MONTH(GETDATE())) AS YearMonth
我缺少的东西转换?因为我收到此错误:
Conversion failed when converting the varchar value ',' to data type int.
感谢
试图输出是这样的:输出年份和月份用绳子
2016,11
使用此:
SELECT
CONVERT(VARCHAR(20),YEAR(GETDATE()) + ',' + MONTH(GETDATE())) AS YearMonth
我缺少的东西转换?因为我收到此错误:
Conversion failed when converting the varchar value ',' to data type int.
感谢
试试这个。
SELECT
CONVERT(VARCHAR(20),YEAR(GETDATE())) + ',' + CONVERT(VARCHAR(20), MONTH(GETDATE())) AS YearMonth
你缺少的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')
我想你想用120而不是12来转换...顺便说一句:它是否一定要依赖分隔字符(如本例中的连字符)? – Shnugo
@Shnugo。 。 。谢谢。我的目标是120或121。 –
您可以使用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,',')
您正在使用哪个数据库管理系统? –
'YEAR()'和'MONTH()'都返回一个数字。您必须分别转换它们才能在字符串连接中使用它们。这个错误是由于'YEAR(GETDATE())+','+ MONTH(GETDATE())',它被作为总共的'CONVERT'的第二个参数... – Shnugo
Khrys,有一个问题:一个月低于10?你期望* 2016,2 *或* 2016,02 *(见'02'中的前导零)? – Shnugo