【问题标题】:Why won't this SQL statement work?为什么这条 SQL 语句不起作用?
【发布时间】:2008-10-27 15:54:29
【问题描述】:

我有以下 SQL 语句:

SELECT DISTINCT name FROM log WHERE NOT name = '' AND name LIKE '%.EDIT%';

它在 Postgres 上运行良好(从日志中返回所有不同的名称,它们不为空并且包含字符串 '.EDIT')。但在 Oracle 上,这条语句不起作用。知道为什么吗?

【问题讨论】:

    标签: sql oracle


    【解决方案1】:
    SELECT DISTINCT name FROM log WHERE NOT name = '' AND name LIKE '%.EDIT%';
    

    1) Oracle 将 '' 视为 NULL,这意味着比较 "NOT name = ''" 永远不会为真或假;改用“IS NOT NULL”。但是……

    2) 第二个条件“name LIKE '%.EDIT%' 无论如何都不会匹配一个空字符串,使得第一个条件变得多余。

    所以改写为:

    SELECT DISTINCT name FROM log WHERE name LIKE '%.EDIT%';
    

    【讨论】:

    • 感谢您的帮助。它工作正常!对于多余的东西,我真是个白痴。但我也不知道,Oracle 将 '' 视为 NULL。谢谢,现在可以了。
    【解决方案2】:

    Oracle中的空字符串相当于NULL,导致比较失败。 将查询的那部分更改为 NAME IS NOT NULL

    【讨论】:

      【解决方案3】:

      您可以在没有“NOT NAME=''”子句的情况下重写该查询。

       SELECT DISTINCT name 
       FROM log
       WHERE name LIKE '%.EDIT%';
      

      这对你有用吗?

      如果不是,它在什么方面不起作用?它会导致错误吗?是否返回了错误的结果?

      请使用此信息扩展您的问题 :-)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-23
        相关资源
        最近更新 更多