返回列表 回复 发帖

請問sql語法

有個看似簡單的查詢~
但似乎不太容易呀~

例如說
想輸入一個參數,如果該參數為空值,就將該欄位的所有值(含Null)查詢出來~

SELECT * FROM TABLE_A
WHERE Column_A  ??? NVL(:parameter,'')

有試過一些條件,但就是很難滿足。
請教各位先進,感謝
SELECT * FROM TABLE_A
WHERE  NVL(Column_A,'X')  = NVL(:parameter,'X');

这样应该可以。
很謝謝您的回覆~
不過
WHERE  NVL(Column_A,'X')  = NVL(:parameter,'X');
如果參數為空值,是會將Column_A空值印出來~

但我是希望說若參數為空值,則將所有值印出來~
感謝~~ 希望能得到協助!!~
SELECT * FROM TABLE_A
WHERE  Column_A  = NVL(:parameter,Column_A);
SELECT * FROM TABLE_A
WHERE  (Column_A  = :parameter or :parameter is null)

这样应该可以。
原帖由 blueworm 于 2008-8-4 13:24 发表
SELECT * FROM TABLE_A
WHERE  Column_A  = NVL(:parameter,Column_A);
这个应该是楼主想要的。如果参数不为null,则只显示column_a=parameter的值。如果参数为null,则会显示全部数据
非常感謝各位的幫忙!!
有解決到我的問題~
有學到了!!! 再一次謝謝各位~
如果該參數為空值,就將該欄位的所有值(含Null)查詢出來~
SELECT * FROM TABLE_A
WHERE  Column_A  = NVL(:parameter,Column_A);
-----------------------------------------------------------------------------------------------------------------------------------------------
当Column_A=null时
null=null是false,可以试试这个sql:select 'a' from dual where  null=null,是不会有值的
但是null is null 是true; select 'a' from dual where  null is null,会有值的
所以
SELECT * FROM TABLE_A
WHERE  (:parameter is null) or (:parameter is not null and Column_A  = NVL(:parameter,Column_A));

[ 本帖最后由 jellycao 于 2008-8-6 16:29 编辑 ]
:parameter is not null and Column_A  = NVL(:parameter,Column_A)
=> 既然 :parameter is not null  ,就不必用 NVL 了 ^^

---------------------------------------------

LZ 的原需求為 : 想輸入一個參數,如果該參數為空值,就將該欄位的所有值(含Null)查詢出來~

所以的確要考慮 column_a 可能為 null

用下面 script 就可以了

SELECT * FROM TABLE_A
WHERE  Column_A  = NVL(:parameter,Column_A);   -- 只會以 column_a is not null 來比對
        or (:parameter is null  and Column_A is null)  -- 增加以 column_a is null 來比對

[ 本帖最后由 blueworm 于 2008-8-6 17:36 编辑 ]
非常感谢blueworm的指出。
那句:parameter is not null 是多余的,但目的是指出where的逻辑是根据参数:parameter是否为null来比对的;blueworm你是以column_a是否为null来比对,开拓一个思路^^。
其實 5樓 的 fws2008 已解決這個需求
SELECT * FROM TABLE_A
WHERE  (Column_A  = :parameter or :parameter is null)

但如果還有別的篩選條件,就不夠了,因為 LZ 的需求是輸入參數與Column_A 的比對,上面的 sql ,如果 :parameter is null ,就如同沒有任何 where 條件了
返回列表