2017-08-08 2 views
1

Ich habe Kreditkarte Expirydate als Tinyint gespeichert. Ich würde sie gerne als Jan, Feb, etc. sehen anstatt 1,2, ... das Folgende funktioniert, aber was ist anders möglich?Wie werden Tinyint-Werte als Monatsname angezeigt?

SELECT ExpMonth, CHOOSE(ExpMonth, 'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec') 
FROM Sales.CreditCard 
+0

CASE-Anweisungen arbeiten auch. – pmbAustin

Antwort

4

Wenn Sie auf 2012 oder oben ...

SELECT FORMAT(DATEFROMPARTS(2000,ExpMonth,1),'MMM','en-US') 

Oder nur eine Lookup-Tabelle mit den Zuordnungen erstellen und auf das beizutreten.

0

Dies soll Ihnen helfen, konvertieren:

WHILE (select <yourValue> from <yourtable>) < 13 
BEGIN 
    declare @monthNum int; 
    set @monthNum = <yourValue> 

    select datename(month, dateadd(month, @monthNum - 1, 0)) as MonthName 
END 
1

Format() wäre meine erste Wahl für eine begrenzte Anzahl von Datensätzen sein.

Nur ein paar mehr Optionen.

Beispiel

Declare @YourTable table(ExpMonth int) 
Insert Into @YourTable values 
(1),(3),(12) 

SELECT ExpMonth 
    , Option2 = left(datename(month,datefromparts(1900,ExpMonth,1)),3) 
    , Option3 = substring(' JanFebMarAprMayJunJulAugSepOctNovDec',ExpMonth*3,3) 
FROM @YourTable 

Returns

ExpMonth Option2 Option3 
1   Jan  Jan 
3   Mar  Mar 
12   Dec  Dec 
+0

Option 3 ist sehr kreativ! – Eli

+0

@Eli musste tief in meinen Köcher für diesen Pfeil greifen, der bis zu meinen dBase-II-Tagen reicht. (Nur für den Fall ... Anfang der 80er) –

Verwandte Themen