sql - SQL - 将字母转换为数字
问题描述
我的任务是将字母等级(A、B+、D-、...)转换为数字等级。A 为 1,B = 2,...。+ 表示减去 0.3,- 加上 0.3(例如 B- = 2.3 和 D+ = 3.7) 是否有任何查询可以解决这个问题?
解决方案
使用映射表并加入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)
推荐阅读
- encryption - 了解 JSEncrypt
- c# - 如何解决 ASP.NET MVC 中的 redirect_uri_mismatch?
- angular - Ionic 5 应用程序中的应用程序数据使用和存储信息
- python - 访问keras批量预测中的数据顺序
- javascript - JavaScript 从剪贴板复制和粘贴文件 - 适用于浏览器,但不适用于桌面
- reactjs - 创建 React 应用程序 - (ESLint) 无法加载配置“shared-config”以进行扩展。参考自:
在 Visual Studio 中 - java - 覆盖对类没有预期效果
- typescript - 对于 TSdx 包,如果没有“new”,则无法调用类构造函数
- c# - 如何构造代码以仅返回某些成员
- single-sign-on - Google SAML 可以通过 HTTP 工作,还是专门用于 HTTPS?