将空值替换为原始表中的文本

时间:2019-03-22 05:53:54

标签: sql oracle

我正在使用Oracle SQL,这是我的表:

电影(目录编号,格式,标题,年份,数字光盘,等级,时间,类型)

如果等级中的某些值为空,如何将所有空值更改为NR文本?

这是我尝试过的方法,但是如何让NR的列标题而不是(NVL,RATING,'NR')成为评分

SELECT RATING, nvl(RATING,'NR')
FROM FILM
WHERE RATING IS NULL;

RATING        NVL(RATING,'NR
------------- -----------------
              NR
              NR
              NR

谢谢!

3 个答案:

答案 0 :(得分:0)

使用coalesce()

select coalesce(rating,'NR')

您的评级列必须为varchar数据类型

或使用NVL

NVL( string1, replace_with )

如果string1为null,则返回值。

答案 1 :(得分:0)

从电影中选择nvl(rating,'Nr')评级

答案 2 :(得分:0)

您可以为结果中的每一列命名:

SELECT
  rating AS rating_with_nulls,
  NVL(rating, 'NR') AS rating
FROM film
ORDER BY rating_with_nulls;

这称为列别名。 AS是可选的。

您可以在以下文档的语法图中找到它:https://docs.oracle.com/database/121/SQLRF/statements_10002.htm#SQLRF01702。查找“ select_list”,您将看到expr [AS] c_alias。可能需要一些时间来熟悉这些图表,但是它们才变得真正有用​​。

有时,将结果命名为列并不是一个好主意。在上面的示例中,如果我们有ORDER BY rating怎么办? rating指的是什么?原始列或表达式结果(其中null替换为'NR')?

NVL是特定于Oracle的。在这种情况下,标准的SQL函数是COALESCE。可以使用NVL,但最好还是知道它仅是Oracle以及在其他DBMS中使用什么。