[英]Oracle SQL set sql values to variable
我正在尝试比较同一张表之间的日期。 我想将每个值存储到一个变量中并比较两个日期之间是否有一个月的差异。
这是我的表结构:
表名:系统参数
SEQNO - INT 主键
系统日期 - 日期
这是我想要实现的目标:
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”月之间仍然是“月之间”,尽管很小),那么它们不相等,因此使用if l_enddate <> l_startdate then
可能更明显相反,不是吗? 另外,检查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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.