your data
CREATE TABLE test(
ID INTEGER NOT NULL
,Month VARCHAR(40) NOT NULL
);
INSERT INTO test
(ID,Month) VALUES
(0,'Mar'),
(1,'July'),
(2,'Jun'),
(3,'Aug');
since month
column type is not clearly indicated as
Select name, alias, months, shortmonths
from sys.syslanguages
where name='us_english'
name |
alias |
months |
shortmonths |
us_english |
English |
January,February,March,April,May,June,July,August,September,October,November,December |
Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec |
and change it into
shortmonth |
fullName |
Jan |
January |
Feb |
February |
Mar |
March |
Apr |
April |
May |
May |
Jun |
June |
Jul |
July |
Aug |
August |
Sep |
September |
Oct |
October |
Nov |
November |
Dec |
December |
by using string_split
, row_number
SELECT shortmonth,
fullname
FROM (SELECT NAME,
alias,
months,
shortmonths,
a.value AS shortmonth,
Row_number()
OVER (
ORDER BY (SELECT NULL)) rn
FROM (SELECT NAME,
alias,
months,
shortmonths
FROM sys.syslanguages
WHERE NAME = 'us_english') b
CROSS apply String_split(shortmonths, ',') a) t1
JOIN (SELECT NAME,
alias,
months,
shortmonths,
c.value fullName,
Row_number()
OVER (
ORDER BY (SELECT NULL)) rn
FROM (SELECT NAME,
alias,
months,
shortmonths
FROM sys.syslanguages
WHERE NAME = 'us_english') b
CROSS apply String_split(months, ',') c) t2
ON t1.rn = t2.rn
use above query in CTE
and join it with your table with first three left
character and then use EOMONTH
and Right
function as follows
SELECT t.*,
m.fullname,
RIGHT(Eomonth(( '01-' + m.fullname + '-2010' )), 5)
FROM test t
JOIN monthname1 m
ON LEFT(t.month, 3) = m.shortmonth
however using a proper year considering leap year should not be neglected.
dbfiddle