· 6 years ago · Jun 13, 2019, 10:02 PM
1DECLARE @InputString VARCHAR(50);
2SELECT @InputString = '23 HG45TV! '
3
4DECLARE @StringLength INT;
5SELECT @StringLength = LEN(@InputString);
6
7DROP TABLE IF EXISTS #InputString;
8CREATE TABLE #InputString ([Character] CHAR(1));
9
10DECLARE @Index INT = 1;
11WHILE @Index <= (@StringLength)
12BEGIN
13 INSERT INTO #InputString (Character)
14 SELECT LOWER(SUBSTRING(@InputString, @Index, 1));
15
16 SELECT @Index = @Index + 1;
17END;
18
19DROP TABLE IF EXISTS #Vowels;
20CREATE TABLE #Vowels (ID INT IDENTITY(1, 1), Vowel CHAR(1));
21INSERT INTO #Vowels (Vowel)
22VALUES ('a'),('e'),('i'),('o'),('u');
23
24DROP TABLE IF EXISTS #Consonants;
25CREATE TABLE #Consonants (ID INT IDENTITY(1,1), Consonant CHAR(1));
26INSERT INTO #Consonants (Consonant)
27VALUES ('a'),('b'),('c'),('d'),('e'),('f'),
28 ('g'),('h'),('i'),('j'),('k'),('l'),
29 ('m'),('n'),('o'),('p'),('q'),('r'),
30 ('s'),('t'),('u'),('v'),('w'),('x'),('z');
31
32DECLARE @Cursor_Character CHAR(1);
33DECLARE @Cursor_Integer CHAR(1);
34DECLARE @Integers VARCHAR(50) = '';
35DECLARE @OutputString VARCHAR(50) = '';
36DECLARE @PreviousINT BIT = 0;
37
38DECLARE db_cursor CURSOR FOR
39SELECT * FROM #InputString;
40OPEN db_cursor
41FETCH NEXT FROM db_cursor INTO @Cursor_Character;
42
43WHILE @@FETCH_STATUS = 0
44BEGIN
45 IF TRY_PARSE(@Cursor_Character AS INT) IS NOT NULL
46 BEGIN
47 SELECT @Integers = @Integers + @Cursor_Character;
48 SELECT @PreviousINT = 1;
49 END
50 ELSE
51 BEGIN
52 SELECT @PreviousINT = 0;
53 END
54 IF @Cursor_Character = 'y'
55 BEGIN
56 SELECT @Cursor_Character = ' ';
57 END
58 ELSE IF @Cursor_Character = ' '
59 BEGIN
60 SELECT @Cursor_Character = 'y';
61 END
62 ELSE IF @Cursor_Character IN (SELECT Vowel FROM #Vowels)
63 BEGIN
64 SELECT @Cursor_Character = CONVERT(CHAR(1),ID) FROM #Vowels AS V WHERE V.Vowel = @Cursor_Character;
65 END
66 ELSE IF @Cursor_Character IN (SELECT Consonant FROM #Consonants)
67 BEGIN
68 SELECT
69 @Cursor_Character = #C.Consonant
70 FROM
71 #Consonants AS #C
72 INNER JOIN #Consonants AS #C2 ON
73 #C.ID = (#C2.ID-1) AND
74 #C2.Consonant = @Cursor_Character;
75 END
76 IF @PreviousINT = 0
77 BEGIN
78 SELECT @OutputString = REPLACE(@OutputString,@Integers,'') + REVERSE(@Integers) + @Cursor_Character;
79 SELECT @Integers = '';
80 END
81 ELSE
82 BEGIN
83 SELECT @OutputString = @OutputString + @Cursor_Character;
84 END
85 FETCH NEXT FROM db_cursor INTO @Cursor_Character;
86END
87CLOSE db_cursor;
88DEALLOCATE db_cursor;
89SELECT @InputString AS [Input String], @OutputString AS [Output String];