如何在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运行它。
答案 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可以更轻松地利用该列的索引。