当 monthid 为 2 位数字时,在 SQL Server 2008 R2 中连接失败
Concatenate in SQL Server 2008 R2 failing when the monthid is 2 digits
我有一个 table 喜欢和服务器是 SQL Server 2008 R2 我们不能使用 concat
功能
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
注意,我们在这里只使用了一个强制转换操作和算术操作。没有使用额外的检查和功能。
最简单的方法是(恕我直言):
SELECT CONVERT(VARCHAR(4), YearID) + RIGHT('0' + CONVERT(VARCHAR(2), MOnthId), 2)
FROM TEST;
我有一个 table 喜欢和服务器是 SQL Server 2008 R2 我们不能使用 concat
功能
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
注意,我们在这里只使用了一个强制转换操作和算术操作。没有使用额外的检查和功能。
最简单的方法是(恕我直言):
SELECT CONVERT(VARCHAR(4), YearID) + RIGHT('0' + CONVERT(VARCHAR(2), MOnthId), 2)
FROM TEST;