Oracle SQL将SQL值设置为变量
我试图在同一张桌子上比较日期。我想将每个值存储到一个变量中,并比较两个日期之间是否存在月差 以下是我的表格结构: 表名:SYSTEMPARAMOracle 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
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哲学。最好描述完整的问题,这样我们可以帮助您找到一个好的解决方案(而不是试图用黄油刀敲打指甲)。