串接在SQL Server 2008 R2失败时monthid是2个位数
问题描述:
我有一个表像和服务器是SQL Server 2008 R2中,我们不能使用concat
功能串接在SQL Server 2008 R2失败时monthid是2个位数
YearID | MonthId
--------+----------
2017 | 1
2014 | 5
2014 | 10
2016 | 12
我想有输出
201701
201405
201410
201612
我试了一下,到目前为止
select
cast(YearId as varchar(50)) + '0' + cast(MonthId as varchar(50))
from
TEST
我得到的输出作为
201701
201405
2014010
2016012
当monthID
是2位数字时,它失败。
如何解决这种情况?
答
首先,你可以通过LEN()
功能与简单case
表达验证MonthId
长度
SELECT CAST(YearID AS VARCHAR(8))+CASE
WHEN LEN(CAST(MonthId AS VARCHAR(8))) = 2
THEN CAST(MonthId AS VARCHAR(8))
ELSE '0'+CAST(MonthId AS VARCHAR(8))
END
FROM <table_name>;
结果:
201701
201405
201410
201612
答
DECLARE @Tmp TABLE (YearID INT ,MOnthId INT)
INSERT INTO @Tmp
SELECT 2017 ,1 UNION ALL
SELECT 2014 ,5 UNION ALL
SELECT 2014 ,10 UNION ALL
SELECT 2016 ,12
SELECT * FROM @Tmp
SELECT
CASE WHEN LEN(MOnthId)>1 THEN CAST(YearId AS VARCHAR(50)) + CAST(MonthId AS VARCHAR(50))
ELSE CAST(YearId AS VARCHAR(50)) + '0' + CAST(MonthId AS VARCHAR(50))END
FROM @Tmp
Results :
201701
201405
201410
201612
答
你可以简单地这样做:
SELECT CAST(YearID * 100 + MonthID AS VARCHAR(6))
FROM mytable
请注意,我们在这里只使用一个强制操作并仅使用算术操作。没有使用额外的检查和功能。
答
最简单的方法是(IMHO):
SELECT CONVERT(VARCHAR(4), YearID) + RIGHT('0' + CONVERT(VARCHAR(2), MOnthId), 2)
FROM TEST;