2013-06-21 48 views
-2

我有我的where子句中的哪個sql哪個sql告訴這是無效的sql語句。 rowname是日期時間。我的if語句有些問題,我無法弄清楚。希望你們能幫助我...謝謝如何解決在oracle和mysql中的這個錯誤

注:我設法改變更清晰的版本我的代碼,希望你們能幫助我(我有兩個表選擇查詢)

其中

   last_update_date between 

        IF tbl1.last_update_date is not null 

        THEN 

         max(tbl1.last_update_date) 

        ELSE 

         min(tbl2.last_update_date) 

        END IF; 

       and 
        sysdate 
+1

您的專欄真的名爲「rowname」嗎? –

+0

你應該使用'COALESCE()',它返回第一個非NULL參數 –

+0

Inline if語句也應該工作(至少在mysql中,我不使用$ Oracle $)。簡單的例子,'IF(值> 100,100,值)' –

回答

0

If不是select語句的語法的一部分。它是更高層次語言的一部分。所以,你不能在where聲明中包含它。你想要類似的東西:

WHERE rowname >= coalesce((select max(rowname) from tbl1), (select min(rowname) from tbl2), rowname)) and 
       sysdate 

另外,sysdate是Oracle的定義。 MySQL通常會使用now()。他們都可能支持ANSI標準CURRENT_TIMESTAMP

+0

第二行應該是'rowname <= CURRENT_TIMESTAMP' - 你還沒有完全翻譯原始 –

+0

的BETWEEN。另外,SQL標準來自ISO,不是ANSI。 –

+0

我想從這兩個MySQL和在甲骨文,這個問題是我想把條件放在我的where子句,其結果將是最短的時間,如果ROWNAME爲空其他最大時間 –