SYSDATE和动态日期之间的区别

时间:2016-03-08 06:13:12

标签: database oracle date-formatting date-arithmetic

实际上我有一个包含日期的变量,它是动态的,来自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时它的抛出错误。

1 个答案:

答案 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>