SQL求助:如何为NVL函数的输出结果正确添加百分号?
解决NVL函数输出添加百分号的问题
问题出在你把百分号拼接的位置不对——如果直接在NVL外面加||'%',会导致No Commission后面也被加上百分号。正确的做法是只给有佣金数值的情况添加百分号,具体有两种实现方式:
方法一:用TO_CHAR格式模型直接生成带百分号的字符串
利用Oracle的TO_CHAR格式模型,在格式化数值时直接包含百分号,这样非null的佣金会自动带上%,null时NVL返回指定文本:
SELECT first_name, last_name, job_title, TO_CHAR(salary, '$99,999') AS salary, -- 使用990%格式,0确保0值显示为0%而非% NVL(TO_CHAR(commission_pct*100, '990%'), 'No Commission') AS commission FROM hr.employees e JOIN hr.jobs j ON e.job_id = j.job_id ORDER BY salary DESC
方法二:在NVL的第一个参数内拼接百分号
只对非null的佣金数值拼接%,null时NVL直接返回No Commission:
SELECT first_name, last_name, job_title, TO_CHAR(salary, '$99,999') AS salary, NVL(TO_CHAR(commission_pct*100) || '%', 'No Commission') AS commission FROM hr.employees e JOIN hr.jobs j ON e.job_id = j.job_id ORDER BY salary DESC
两种方法都能实现需求:有佣金的字段显示带%的数值,无佣金的显示No Commission。如果需要更规范的格式(比如保留小数位),推荐用方法一,可调整格式模型,例如'990.00%'来显示两位小数的百分比。
内容的提问来源于stack exchange,提问作者fice
相关产品推荐
相关产品推荐

