如何用文本替换空值?

问题描述 投票:0回答:7

我需要在Oracle SQL中的员工表中显示员工

last_name
及其佣金金额,但条件是如果遇到
NULL
值我需要打印“无佣金”
对于第一部分,我写道:

select last_name, commission_pct from employees;

但我无法了解如何用

“无佣金”
替换 NULL 值。

sql oracle null
7个回答
44
投票

您可以使用

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


8
投票

对于甲骨文

select last_name, nvl(commission_pct,'No Commission')
from employees;

对于 SQL

select last_name, isnull(commission_pct,"No Commission") as commission_pct
    from employees;

4
投票

正如您所看到的那样简单,Isnull() 用于将 NULL 值替换为我们传递到那里的默认值,所以我在这里所做的是如果 “commission_pct” 具有 NULL 值,那么它将替换为“无佣金” 文本,我已将其作为第二个参数传入 ISNULL()。

  select last_name, 
    ISNULL(commission_pct,'No Commission') AS commission_pct
    from employees;

3
投票

另一种选择,非常简单且精确:

nvl(to_char(commision_pct), 'No Commission') 

由于

commision_pct
NUMBER 数据类型,
to_char
会将其显式转换为字符串。


2
投票

选择姓氏, 解码(nvl(工资commission_pct,'0'),0,'无佣金',工资commission_pct)作为COMM 来自员工;


0
投票

如果情况是这样的:

Select job_id, job_title, employee_id
from jobs join job_history using (job_id);

并显示所有曾在那里工作过的employee_id,如果不是,则替换为

varchar


0
投票

使用怎么样

IFF()

SELECT 
    last_name, 
    IFF(last_name IS NULL OR last_name ='','No Commission',last_name ) AS Clean_last_name
    FROM Data_Table;
© www.soinside.com 2019 - 2024. All rights reserved.