使用date作为where子句中的变量

时间:2014-02-12 01:36:34

标签: sql oracle10g

如何在where子句中将date用作变量?我似乎无法理解它是如何工作的。

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运行它。

1 个答案:

答案 0 :(得分: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可以更轻松地利用该列的索引。