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