2014-02-24 43 views
0

基於Java的應用程序正在使用通用選擇查詢從所有數據庫提取記錄。應該刪除特定列(此處爲'id')的值爲空的記錄。空值過濾器不適用於DB2和Sybase

這是查詢:

SELECT * from Employee WHERE 1=1 AND id IS NOT NULL AND cast(id as varchar) !=''

它工作正常的所有數據庫但給人的SQLException爲DB2。

的目標是:

  1. 檢查空和空值被認爲是DB2 /的Sybase相同。
  2. 修改SQL查詢,使之成爲DB2工作/的Sybase
+3

其中的SQLException?通常,DBMS提供了一個錯誤的根本原因,如果您想獲得任何特定答案,發佈此類信息就顯得非常重要。 – Gimby

+0

DB2區分了空值和空值(或者至少是iSeries版本) - 我認爲Oracle可能是唯一一個表現這種行爲的人。 DB2可能會拋出'!=' - 如果您試圖創建一個「通用查詢」,那麼當您進行日期/時間操作時(無人使用完全相同的方式),您將遇到問題。 –

回答

0

雖然這會不會影響你的問題,我會使用<>操盤!=(前者絕對是標準的一部分,我不敢肯定,如果該標準的新版本上!=堅持被支持):

SELECT * 
from Employee 
WHERE 1=1 AND id IS NOT NULL AND id <> ''; 

下一個可疑的事情是一個比較向id一個字符串。如果id是一個字符串,那麼沒問題。但是,如果它是數字,您可能會遇到類型不兼容的情況。試試這些where條款中的一項:

WHERE 1=1 AND id IS NOT NULL AND id <> 0; 

WHERE 1=1 AND id IS NOT NULL AND cast(id as varchar(255)) <> ''; 
+0

id只是一個例子。該字段可以是整數或varchar – SID

+0

@SID。 。 。不幸的是,我手邊沒有任何數據庫來找出問題所在。這是一個最好的猜測,因爲查詢看起來很簡單,應該在任何數據庫上運行。如果輸入是問題,那麼最後的where子句應該起作用。 –

+0

我修改了查詢以將int列轉換爲文本進行空白檢查,並且它適用於Sybase。但是我仍然無法在DB2上運行它 – SID