2017-11-18 211 views
1

我有一個表像和服務器是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位數字時,它失敗。

如何解決這種情況?

回答

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 
0
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 
6

你可以簡單地這樣做:

SELECT CAST(YearID * 100 + MonthID AS VARCHAR(6)) 
FROM mytable 

請注意,我們在這裏只使用一個強制操作並僅使用算術操作。沒有使用額外的檢查和功能。

1

最簡單的方法是(IMHO):

SELECT CONVERT(VARCHAR(4), YearID) + RIGHT('0' + CONVERT(VARCHAR(2), MOnthId), 2) 
FROM TEST; 

test here

相關問題