实际上我有一个包含日期的变量,它是动态的,来自java,我必须得到那个日期并与系统日期比较并得到数字变量的结果
前:
SELECT trunc(sysdate)-TO_date('05/03/2016', 'dd/mm/yyyy') DAYS FROM DUAL;
我将使用该数字来验证其他表达式。我的实际查询应该是这样的
SELECT trunc(sysdate)-TO_date(VariableX, 'dd/mm/yyyy') DAYS FROM DUAL;
所以这里的VariableX包含动态日期,第一个查询,其中我有硬编码的日期工作正常,但是当我尝试使用varibaleX时它的抛出错误。
答案 0 :(得分:1)
变量必须是字符串文字,以便您可以使用 TO_DATE 和正确的格式掩码将其转换为 DATE 。
例如,
使用 SQL * Plus替换变量:
SQL> SELECT TRUNC(SYSDATE) - TO_DATE(&date, 'dd/mm/yyyy') DAYS FROM DUAL;
Enter value for date: '01/03/2016'
old 1: SELECT TRUNC(SYSDATE) - TO_DATE(&date, 'dd/mm/yyyy') DAYS FROM DUAL
new 1: SELECT TRUNC(SYSDATE) - TO_DATE('01/03/2016', 'dd/mm/yyyy') DAYS FROM DUAL
DAYS
----------
7
SQL>
使用绑定变量:
SQL> variable dt varchar2(10);
SQL> exec :dt := '01/03/2016';
PL/SQL procedure successfully completed.
SQL> SELECT TRUNC(SYSDATE) - TO_DATE(:dt, 'dd/mm/yyyy') DAYS FROM DUAL;
DAYS
----------
7
SQL>