【问题标题】:Need to know the role of && in this query需要知道&&在这个查询中的作用
【发布时间】:2019-01-13 12:05:27
【问题描述】:

谁能提供以下查询的解释以及为什么在此查询中有&& 用法?这个查询的输出是什么?

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;

【问题讨论】:

  • 您好,新用户。 "from dual" 是 ORACLE 语法 (IIRC),而不是 Microsoft Sql Server 语法/对象。请从您的标签中删除“sql-server”并添加 oracle。适当的“标签”将帮助您早日得到答案。最良好的祝愿。
  • 感谢您的回复,但无法更改我的标签,您能建议我怎么做吗

标签: sql oracle sqlplus


【解决方案1】:

这是关于 Oracle 的 SQL*Plus 替换变量的。

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

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

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>

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


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

SQL> /
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> undefine days
SQL> /
Enter value for days:

【讨论】:

    【解决方案2】:

    双和号“”用于将文字值(“文字”)插入到 SqlPlus 中的 SQL 语句中。在您的脚本中的某个地方必须有一个定义文字日期的语句。 类似的东西

    DEFINE days = &1
    

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

    如果您输入一个有效数字,它将从实际日期中减去。 您也可以使用生成数字的有效 SQL 表达式来代替数字。

    【讨论】:

      【解决方案3】:

      在小时代码中 & & 表示该日期的天数必须是,否则永远不要选择日期,通常“&&”是逻辑运算符,用作 AND。

      猜你喜欢
      • 1970-01-01
      • 2018-12-28
      • 2015-12-25
      • 2021-06-28
      • 2015-04-07
      • 2011-04-25
      • 1970-01-01
      • 2015-02-10
      • 2013-06-22
      相关资源
      最近更新 更多