By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
SELECT
D.rn
, ASCII_ORD.ord_value
, ASCII_ORD.replicate_count
-- CHAR converts a number to a character
, CHAR(ASCII_ORD.ord_value) AS ord_value_as_character
-- REPLICATE repeats a string N times
, REPLICATE(CHAR(ASCII_ORD.ord_value), ASCII_ORD.replicate_count) AS RepeatedCharacter
-- CONCAT is a null and type approach for string building (requires 2012+)
, CONCAT(CHAR(ASCII_ORD.ord_value), ASCII_ORD.replicate_count) AS ConcatenatedCharacter
FROM
(
-- Generate 0 to N-1 rows
SELECT TOP (300)
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) -1
FROM
sys.all_columns AS AC
)D(rn)
CROSS APPLY
(
-- There are 26 characters in the English language
-- 65 is the ASCII ordinal position of a capital A
SELECT
D.rn % 26 + 65
, D.rn / 26 + 1
) ASCII_ORD(ord_value, replicate_count)
ORDER BY
D.rn
OFFSET 20 ROWS
FETCH NEXT 30 ROWS ONLY
;
rn | ord_value | replicate_count | ord_value_as_character | RepeatedCharacter | ConcatenatedCharacter |
---|---|---|---|---|---|
20 | 85 | 1 | U | U | U1 |
21 | 86 | 1 | V | V | V1 |
22 | 87 | 1 | W | W | W1 |
23 | 88 | 1 | X | X | X1 |
24 | 89 | 1 | Y | Y | Y1 |
25 | 90 | 1 | Z | Z | Z1 |
26 | 65 | 2 | A | AA | A2 |
27 | 66 | 2 | B | BB | B2 |
28 | 67 | 2 | C | CC | C2 |
29 | 68 | 2 | D | DD | D2 |
30 | 69 | 2 | E | EE | E2 |
31 | 70 | 2 | F | FF | F2 |
32 | 71 | 2 | G | GG | G2 |
33 | 72 | 2 | H | HH | H2 |
34 | 73 | 2 | I | II | I2 |
35 | 74 | 2 | J | JJ | J2 |
36 | 75 | 2 | K | KK | K2 |
37 | 76 | 2 | L | LL | L2 |
38 | 77 | 2 | M | MM | M2 |
39 | 78 | 2 | N | NN | N2 |
40 | 79 | 2 | O | OO | O2 |
41 | 80 | 2 | P | PP | P2 |
42 | 81 | 2 | Q | Q2 | |
43 | 82 | 2 | R | RR | R2 |
44 | 83 | 2 | S | SS | S2 |
45 | 84 | 2 | T | TT | T2 |
46 | 85 | 2 | U | UU | U2 |
47 | 86 | 2 | V | VV | V2 |
48 | 87 | 2 | W | WW | W2 |
49 | 88 | 2 | X | XX | X2 |