在 SQL 中显示字母而不是字符串数字

Display letters instead of string numbers in SQL

如何编写一个查询,通过提供行 ID 和大小编号来响应字母打印?

示例:

ID = 4000

姓名 = 38/39/40/41/42/43/44


我的输入:

ID = 4000

姓名 = 40


结果 = A/B/C/D/E/F/G 40 = C

请尝试以下解决方案。

SQL

-- DDL and sample data population, start
DECLARE @tbl AS TABLE (ID INT PRIMARY KEY, tokens VARCHAR(MAX));
INSERT INTO @tbl (ID, tokens) VALUES
(2000, '44/46/48/50/52/54'),
(4000, '38/39/40/41/42/43/44');
-- DDL and sample data population, end

DECLARE @separator CHAR(1) = '/'
    , @alphabet VARCHAR(50) = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    , @ID INT = 4000
    , @token VARCHAR(20) = '40';

SELECT *
    , Result = IIF(pos > 0, SUBSTRING(@alphabet,pos,1),NULL)
FROM @tbl AS t
CROSS APPLY (SELECT TRY_CAST('<root><r>' + 
    REPLACE(tokens, @separator, '</r><r>') + 
    '</r></root>' AS XML)
    .query('
        for $x in /root/r
        let $pos := count(/root/r[. << $x[1]]) + 1
        return if ($x/text()=sql:variable("@token")) then $pos
        else ()
    ').value('.', 'INT')) AS t1(pos)
WHERE ID = @ID;

输出

+------+----------------------+-----+--------+
|  ID  |        tokens        | pos | Result |
+------+----------------------+-----+--------+
| 4000 | 38/39/40/41/42/43/44 |   3 | C      |
+------+----------------------+-----+--------+