Oracle SQL中如何将数字转换为带圈数字?(如1转①、20转⑳)
Oracle SQL 数字转带圈数字实现方案
实现原理
1~20的带圈数字在Unicode编码中为连续序列,数字1对应编码为U+2460(十进制值9312),数字N(1≤N≤20)对应的带圈字符编码为 9311 + N,通过Oracle的Unicode字符转换函数即可直接生成对应字符。
单语句直接转换写法
适合单次使用场景,直接在查询语句中嵌入转换逻辑即可:
SELECT CASE WHEN num_col BETWEEN 1 AND 20 THEN CHR(9311 + num_col USING NCHAR_CS) ELSE TO_CHAR(num_col) -- 超出1-20范围时返回原数字字符串,可根据需求调整逻辑 END AS circled_num FROM your_table;
效果测试
-- 测试1和20的转换效果 SELECT CHR(9311 + 1 USING NCHAR_CS) AS num_1, CHR(9311 + 20 USING NCHAR_CS) AS num_20 FROM DUAL;
返回结果:num_1 = ①,num_20 = ⑳
封装为自定义函数(复用场景)
如果需要频繁调用该转换逻辑,可封装为存储函数全局使用:
CREATE OR REPLACE FUNCTION TO_CIRCLED_NUM(p_num NUMBER) RETURN NVARCHAR2 IS BEGIN IF p_num BETWEEN 1 AND 20 THEN RETURN CHR(9311 + p_num USING NCHAR_CS); ELSE -- 超出1-20范围的处理逻辑,可自行修改 RETURN TO_NCHAR(p_num); END IF; END; /
函数调用示例
SELECT TO_CIRCLED_NUM(5) FROM DUAL; -- 返回 ⑤ SELECT TO_CIRCLED_NUM(12) FROM DUAL; -- 返回 ⑫
注意:如果查询结果出现乱码,可确认数据库
NLS_NCHAR_CHARACTERSET参数配置为AL16UTF16或UTF8,确保支持Unicode字符展示。
内容的提问来源于stack exchange,提问作者AasthaB
相关产品推荐
相关产品推荐

