谁能提供以下查询的解释,以及为什么该查询中使用&&
?该查询的输出是什么?
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;
答案 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。