【问题标题】:How to replace null values with a text?如何用文本替换空值?
【发布时间】:2015-05-01 06:07:49
【问题描述】:

我需要在 Oracle SQL 的员工表中显示 Employee last_name 及其佣金金额,但条件是如果遇到 NULL 值我需要打印 “No Commission”。 对于我写的第一部分:

select last_name, commission_pct from employees;

但我不知道如何用 “无佣金” 替换 NULL 值。

【问题讨论】:

    标签: sql oracle null


    【解决方案1】:

    你可以使用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,您还应该使用castto_char

    【讨论】:

    • 返回错误:不一致的数据类型:预期的 CHAR 得到了 NUMBER
    • commision_pct 应该在表中存储为varchar 否则需要使用CAST
    • 好的,是的,commission_pct 存储为 NUMBER。
    • nvl(to_char(commision_pct), 'No Commission')
    • @user308967:不客气。感谢ughai。)
    【解决方案2】:

    对于甲骨文

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

    对于 SQL

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

    【讨论】:

      【解决方案3】:

      如你所见,Isnull()用于将NULL值替换为我们传递的默认值,所以我这里做的是If "commission_pct" 具有 NULL 值,然后它将替换为 "No Commission" 文本,我已将其作为第二个参数传入 ISNULL()。

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

      【讨论】:

      • 避免仅使用代码的答案。添加一些关于您的答案的描述。
      【解决方案4】:

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

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

      由于commision_pctNUMBER 数据类型,to_char 将显式将其转换为字符串。

      【讨论】:

        【解决方案5】:

        选择姓氏, decode(nvl(salarycommission_pct,'0'),0,'无佣金',salarycommission_pct) as COMM 来自员工;

        【讨论】:

          【解决方案6】:

          如果条件是这样的:

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

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

          【讨论】:

            猜你喜欢
            • 2021-01-20
            • 2017-06-19
            • 2017-11-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-03-02
            • 1970-01-01
            相关资源
            最近更新 更多