【发布时间】:2015-05-01 06:07:49
【问题描述】:
我需要在 Oracle SQL 的员工表中显示 Employee last_name 及其佣金金额,但条件是如果遇到 NULL 值我需要打印 “No Commission”。
对于我写的第一部分:
select last_name, commission_pct from employees;
但我不知道如何用 “无佣金” 替换 NULL 值。
【问题讨论】:
我需要在 Oracle SQL 的员工表中显示 Employee last_name 及其佣金金额,但条件是如果遇到 NULL 值我需要打印 “No Commission”。
对于我写的第一部分:
select last_name, commission_pct from employees;
但我不知道如何用 “无佣金” 替换 NULL 值。
【问题讨论】:
你可以使用case表达式:
select last_name
, case when commision_pct is null then 'No Commission' else commision_pct end
from employees;
或coalesce:
select last_name
, coalesce(commision_pct, 'No Commission')
from employees;
或nvl:
select last_name
, nvl(commision_pct, 'No Commission')
from employees;
附注如果commision_pct 的数据类型不是varchar,您还应该使用cast 或to_char。
【讨论】:
commision_pct 应该在表中存储为varchar 否则需要使用CAST
nvl(to_char(commision_pct), 'No Commission')
对于甲骨文
select last_name, nvl(commission_pct,'No Commission')
from employees;
对于 SQL
select last_name, isnull(commission_pct,"No Commission") as commission_pct
from employees;
【讨论】:
如你所见,Isnull()用于将NULL值替换为我们传递的默认值,所以我这里做的是If "commission_pct" 具有 NULL 值,然后它将替换为 "No Commission" 文本,我已将其作为第二个参数传入 ISNULL()。
select last_name,
ISNULL(commission_pct,'No Commission') AS commission_pct
from employees;
【讨论】:
另一种选择,非常简单和精确:
nvl(to_char(commision_pct), 'No Commission')
由于commision_pct 是NUMBER 数据类型,to_char 将显式将其转换为字符串。
【讨论】:
选择姓氏, decode(nvl(salarycommission_pct,'0'),0,'无佣金',salarycommission_pct) as COMM 来自员工;
【讨论】:
如果条件是这样的:
Select job_id, job_title, employee_id
from jobs join job_history using (job_id);
并显示所有在那里工作的employee_id,如果不是,则替换为varchar
【讨论】: