首页 > 解决方案 > SQL - 将字母转换为数字

问题描述

我的任务是将字母等级(A、B+、D-、...)转换为数字等级。A 为 1,B = 2,...。+ 表示减去 0.3,- 加上 0.3(例如 B- = 2.3 和 D+ = 3.7) 是否有任何查询可以解决这个问题?

标签: sql

解决方案


使用映射表并加入LEFT(letter, 1)。然后CASE在函数中使用 a 添加或删除 0.3RIGHT(letter, 1)

WITH
grades(letter) AS (
    VALUES ('A'), ('A+'), ('B'), ('B-'), ('D+'), ('F-')
),
mapping(letter, num) AS (
    VALUES ('A', 1), ('B', 2), ('C', 3), ('D', 4), ('E', 5), ('F', 6)
)
SELECT
    grades.letter AS grade,
    CASE 
        WHEN RIGHT(grades.letter, 1) = '+' THEN mapping.num - 0.3
        WHEN RIGHT(grades.letter, 1) = '-' THEN mapping.num + 0.3
        ELSE mapping.num
    END AS num
FROM
    grades
JOIN
    mapping ON mapping.letter = LEFT(grades.letter, 1);

结果:

 grade | num
-------+-----
 A     |   1
 A+    | 0.7
 B     |   2
 B-    | 2.3
 D+    | 3.7
 F-    | 6.3
(6 rows)

推荐阅读