需要知道&&在此查询中的角色

时间:2019-01-13 12:05:27

标签: sql oracle sqlplus

谁能提供以下查询的解释,以及为什么该查询中使用&&?该查询的输出是什么?

SELECT 
    ((TRUNC(SYSDATE - (&&days)) - TO_DATE('01-JAN-1970')) * 86400000) - 7200000 AS ts, 
    to_char(SYSDATE - (&&days), 'YYYYMMDD') || '_pt.txt' as pt_filenm from dual;

3 个答案:

答案 0 :(得分:2)

它与Oracle的SQL * Plus替代变量有关。

  • 如果您使用string,则每次都会提示您输入变量值
  • 如果您使用string,则不会提示您使用已输入值的变量

这是一个例子。我正在设置默认日期格式并选择今天的日期:

&

现在,为什么我们在这里。首先,我仅使用一个&&,系统将提示您输入两次以从今天的日期中减去的天数:

SQL> alter session set nls_date_format = 'dd.mm.yyyy';

Session altered.

SQL> select trunc(sysdate) l_today from dual;

L_TODAY
----------
13.01.2019

但是,如果我使用&,则只会提示我一次:

SQL> select trunc(sysdate - &days) l_one,
  2         to_char(trunc(sysdate - &days), 'yyyy-mm-dd') l_two
  3  from dual;
Enter value for days: 5
old   1: select trunc(sysdate - &days) l_one,
new   1: select trunc(sysdate - 5) l_one,
Enter value for days: 5
old   2:        to_char(trunc(sysdate - &days), 'yyyy-mm-dd') l_two
new   2:        to_char(trunc(sysdate - 5), 'yyyy-mm-dd') l_two

L_ONE      L_TWO
---------- ----------
08.01.2019 2019-01-08

因此,它可以节省您一些时间,并减少出错的可能性。


请注意-如果您使用&&并再次运行相同的代码,则不会提示您输入变量的值-该变量将自动重复使用:

SQL> select trunc(sysdate - &&days) l_one,
  2         to_char(trunc(sysdate - &&days), 'yyyy-mm-dd') l_two
  3  from dual;
Enter value for days: 10
old   1: select trunc(sysdate - &&days) l_one,
new   1: select trunc(sysdate - 10) l_one,
old   2:        to_char(trunc(sysdate - &&days), 'yyyy-mm-dd') l_two
new   2:        to_char(trunc(sysdate - 10), 'yyyy-mm-dd') l_two

L_ONE      L_TWO
---------- ----------
03.01.2019 2019-01-03

SQL>

如果要更改其值,请先取消定义

&&

答案 1 :(得分:0)

双与号“”用于将文字值(“文字”)插入SqlPlus中的SQL语句。在脚本中的某个地方,必须有一个定义文字天数的语句。 像

DEFINE days = &1

ACCEPT days DEFAULT 0 PROMPT Enter the number of days you forgot to start this script (Default 0):

如果输入有效数字,将从实际日期中减去该数字。 除了数字以外,您还可以使用有效的SQL表达式来生成数字。

答案 2 :(得分:-1)

必须以小时代码&&平均日期为准,否则请勿选择日期,通常“ &&”是逻辑运算符,用作AND。