Oracle SQL将SQL值设置为变量

Oracle SQL将SQL值设置为变量,sql,oracle,Sql,Oracle,我试图在同一张桌子上比较日期。我想将每个值存储到一个变量中,并比较两个日期之间是否存在月差 以下是我的表格结构: 表名:SYSTEMPARAM SEQNO-INT主键 SYSTEMDATE-日期 以下是我想要实现的目标: var startdate = "SELECT SYSTEMDATE FROM SYSTEMPARAM WHERE SEQNO = '1'"; var enddate = "SELECT SYSTEMDATE FROM SYSTEMPARAM WH

我试图在同一张桌子上比较日期。我想将每个值存储到一个变量中,并比较两个日期之间是否存在月差

以下是我的表格结构:

表名:SYSTEMPARAM
SEQNO-INT主键
SYSTEMDATE-日期

以下是我想要实现的目标:

var startdate = "SELECT SYSTEMDATE FROM SYSTEMPARAM WHERE SEQNO = '1'";
var enddate = "SELECT SYSTEMDATE FROM SYSTEMPARAM WHERE SEQNO = '2'";

if(MONTHS_BETWEEN(startdate , enddate ){

  //Conditions here
}
我想比较两条sql语句之间是否有一个月的差异。

“过程”表示PL/sql。所以,这样做吧

只是想知道日期代表什么:

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

Session altered.
附表内容:

SQL> select * From systemparam;

     SEQNO SYSTEMDATE
---------- ----------
         1 04.04.2021
         2 05.04.2021
匿名PL/SQL块:

SQL> set serveroutput on
SQL> declare
  2    l_startdate systemparam.systemdate%type;
  3    l_enddate   systemparam.systemdate%type;
  4  begin
  5    select s.systemdate
  6      into l_startdate
  7      from systemparam s
  8      where s.seqno = 1;
  9
 10    select s.systemdate
 11      into l_enddate
 12      from systemparam s
 13      where s.seqno = 2;
 14
 15    if months_between(l_enddate, l_startdate) > 0 then
 16       dbms_output.put_line('Dates are not equal');
 17    end if;
 18  end;
 19  /
Dates are not equal

PL/SQL procedure successfully completed.

SQL>

尽管如此,如果这两个日期之间有任何“月”(0.01“月之间仍然是“月之间”,虽然很小),那么它们并不相等,所以如果l_enddate l_startdate则使用
可能更明显,不是吗?另外,选中
SELECT
语句的另一个选项:

SQL> declare
  2    l_startdate systemparam.systemdate%type;
  3    l_enddate   systemparam.systemdate%type;
  4  begin
  5    select max(case when s.seqno = 1 then s.systemdate end),
  6           max(case when s.seqno = 2 then s.systemdate end)
  7      into l_startdate,
  8           l_enddate
  9    from systemparam s;
 10
 11    if l_enddate <> l_startdate then
 12       dbms_output.put_line('Dates are not equal');
 13    end if;
 14  end;
 15  /
Dates are not equal

PL/SQL procedure successfully completed.

SQL>
SQL>declare
2 l_startdate系统参数systemdate%类型;
3 l_enddate系统参数systemdate%类型;
4开始
5选择最大值(如果s.seqno=1,则选择s.systemdate end),
最多6个(如果s.seqno=2,则s.systemdate结束)
7号进入l_起始日期,
8 l_结束日期
9来自systemparam s;
10
11如果l_结束日期l_开始日期,则
12 dbms_输出。put_行(“日期不相等”);
13如果结束,则结束;
14结束;
15  /
日期不相等
PL/SQL过程已成功完成。
SQL>

在“比较”之后,您需要如何处理您获得的信息?从您到目前为止所描述的内容来看,一切都可以在纯SQL中完成(因此,没有“if语句”和“变量赋值”)。您似乎希望从过程的角度来处理问题,这不是SQL哲学。最好描述完整的问题,这样我们可以帮助您找到一个好的解决方案(而不是试图用黄油刀敲打指甲)。