2014-02-12 75 views
0

如何將date用作where子句中的變量?我似乎無法理解它是如何工作的。在where子句中使用日期作爲變量

SELECT MOPACTIVITY.mopid, 
     TO_CHAR(MOPACTIVITY.mopstart, 'yyyy-mm-dd hh24:mi') SOM, 
     TO_CHAR(MOPACTIVITY.mopend, 'yyyy-mm-dd hh24:mi') EOM 
FROM MOPUSER.MOPACTIVITY 
WHERE MOPACTIVITY.mopstart BETWEEN '01-JAN-14' AND '31-JAN-14' 

以上代碼的正確語法是什麼?我正在嘗試從Oracle SQL Developer中運行此操作。

+0

請注意,您的where子句不會在30-JAN-14的午夜之後返回mopstart所在的行。 –

回答

2

您的代碼將與各地的常量報價工作:

$a = '2014-01-01 00:00:00'; 
$b = '2014-01-31 23:59:59'; 

SELECT MOPACTIVITY.mopid, 
     TO_CHAR(MOPACTIVITY.mopstart, 'yyyy-mm-dd hh24:mi') SOM, 
     TO_CHAR(MOPACTIVITY.mopend, 'yyyy-mm-dd hh24:mi') EOM 
FROM MOPUSER.MOPACTIVITY 
WHERE TO_CHAR(MOPACTIVITY.mopstart, 'yyyy-mm-dd hh24:mi') BETWEEN $a AND $b; 

但在實踐中,它通常是更好的常量轉換爲列的類型,而不是相反:

WHERE MOPACTIVITY.mopstart BETWEEN to_date($a, 'yyyy-mm-dd hh24:mi') AND 
            to_date($b, 'yyyy-mm-dd hh24:mi') 

通過不更改列的類型,Oracle可以更輕鬆地利用該列上的索引。

+0

我在回覆的第一個代碼上出現以下錯誤:ORA-00911:無效字符 00911. 00000 - 「無效字符」 *原因:標識符可能不以 字母和數字以外的任何ASCII字符開頭。 $#_也允許在第一個 –

+0

@JonathanMorningstar之後。 。 。我正在關注您在問題中使用的模板。如果這是PL/SQL,那麼你需要聲明變量並賦值。你的代碼看起來更像php樣式的變量。 –

+0

我正在使用Oracle。有什麼想法嗎? –

相關問題