我需要在Oracle SQL中的员工表中显示员工
last_name
及其佣金金额,但条件是如果遇到NULL
值我需要打印“无佣金”。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
。
对于甲骨文
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 值替换为我们传递到那里的默认值,所以我在这里所做的是如果 “commission_pct” 具有 NULL 值,那么它将替换为“无佣金” 文本,我已将其作为第二个参数传入 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
会将其显式转换为字符串。
选择姓氏, 解码(nvl(工资commission_pct,'0'),0,'无佣金',工资commission_pct)作为COMM 来自员工;
如果情况是这样的:
Select job_id, job_title, employee_id
from jobs join job_history using (job_id);
并显示所有曾在那里工作过的employee_id,如果不是,则替换为
varchar
使用怎么样
IFF()
SELECT
last_name,
IFF(last_name IS NULL OR last_name ='','No Commission',last_name ) AS Clean_last_name
FROM Data_Table;