2013-04-08 107 views
0

我正在玩sqlplus命令提示符,我想显示一个默认字符串,让所有NULL列的'ITISNULL'没有更新它们。 select * from注册其中...SQL:NULL列的输出默认字符串

注册表是一个可能在其lgrade列中包含空值的表。我不想更新它,但只是想要一个输出字符串说,“被分级”在其位置打印。

是否有我可以使用的任何SQL函数?

回答

3

有几种方法可以做到这一点。一种选择是使用COALESCE

SELECT COALSECE(lgrade, 'to be graded')... 

不能指定*所有字段,你就必须相应地指定每个列名。

+0

另一种伟大的方式来做到这一点。从来没有尝试过测试它,但我不知道是否比另一个更快(很可能不是) – Limey 2013-04-08 18:44:18

+0

@Limey - 这是一篇关于差异的好文章:http://stackoverflow.com/questions/950084/oracle-differences- between-nvl-and-coalesce – sgeddes 2013-04-08 18:50:42

+0

谢谢sgeddes!有效!!! – 2013-04-08 19:04:48

1

在SQL * Plus可以使用​​:

SQL> SET NULL 'ITISNULL' 
SQL> SELECT ... 

所有NULL结果将显示为ITISNULL。唯一的问题是宽度小于8(长度为ITISNULL)的列可能会换行 - 至少它们会在我旧版本的SQL * Plus(9.2)中执行。

要返回SQL * Plus将其默认情况下,发出以下命令:

SQL> SET NULL '' 
0

有很多的方式来表达一个字符串时,该列是空的。如上所述,一些方法: -

  1. 只要col1的值为null,就使用NVL来显示'itisnull'。

    select nvl(col1, 'itisnull') from tableName; 
    
  2. 每当col1的值为null时,使用CASE显示'itisnull'。

    select 
    case when col1 is null then 
    'itisnull' 
    else col1 
    end colum from tableName; 
    
+0

我几乎赞成这个,但我不确定if-esle部分。我快速浏览了文档,并且我不相信这是适合使用该语法的地方。 – 2013-04-08 19:25:16

+0

正确...我的坏...我更新了代码 – Max 2013-04-08 20:47:45

+1

,你忘了我的两个最喜欢的'NVL2'和'DECODE' – haki 2013-04-09 12:12:29