2017-11-18 1 views
1

Ich habe eine Tabelle wie und Server SQL Server 2008 R2 ist, wo wir nicht concat FunktionConcatenate in SQL Server 2008 R2 andernfalls, wenn die monthID 2 Ziffern

YearID | MonthId  
--------+---------- 
2017 | 1 
2014 | 5 
2014 | 10 
2016 | 12 

Ich möchte die Ausgabe als

haben können
201701 
201405 
201410 
201612 

Was ich versuchte, so weit

select 
    cast(YearId as varchar(50)) + '0' + cast(MonthId as varchar(50)) 
from 
    TEST 

ich erhalte die Ausgabe als

201701  
201405 
2014010 
2016012 

Wenn die monthID 2 Ziffern ist, schlägt sie fehl.

Wie geht man mit dieser Situation um?

Antwort

2

Zuerst könnte die Länge der MonthId durch LEN() Funktion mit einfachen case Ausdruck überprüfen

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>; 

Ergebnis:

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

Sie können dies einfach tun:

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

Beachten Sie, dass hier nur eine Umwandlung und nur arithmetische Operationen verwendet werden. Es werden keine zusätzlichen Prüfungen und Funktionen verwendet.

1

der einfachste Weg ist (imho):

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

test here

Verwandte Themen