PLSQL 用了最简单的逻辑计算
把8位数的日期,截取成8个字符一一对比,就可以得出回文日。
主要函数:
截取字符函数substr(字段,a,b),a是截取起始位置,b是截取长度。
截取日期的年份/月份函数:
EXTRACT( YEAR from 日期字段)
EXTRACT( Month from 日期字段)
下面是存过代码:
CREATE OR REPLACE PROCEDURE weihuiri (start_date IN NUMBER,end_date NUMBER) IS
i number(10);
v_start_date number(10);
age NUMBER (3);
BEGIN
v_start_date := start_date;
i :=0;
age :=0;
DBMS_OUTPUT.PUT_LINE('出生日期:'|| v_start_date );
WHILE( to_date(v_start_date,'yyyymmdd') <= to_date(end_date,'yyyymmdd') ) loop
if (substr(v_start_date,1,1)=substr(v_start_date,8,1) and substr(v_start_date,2,1)=substr(v_start_date,7,1)
and substr(v_start_date,3,1)=substr(v_start_date,6,1) and substr(v_start_date,4,1)=substr(v_start_date,5,1) )
THEN
i := i+1;
age := EXTRACT( YEAR from to_date(v_start_date,'yyyymmdd')) - EXTRACT( YEAR from to_date(start_date,'yyyymmdd'));
if (age < 10) THEN
DBMS_OUTPUT.PUT_LINE(v_start_date||'是出生日期的第'|| i ||'个回文日,你才'||age||'岁' );
END IF;
IF (age >= 10 AND age<60) THEN
DBMS_OUTPUT.PUT_LINE(v_start_date||'是出生日期的第'|| i ||'个回文日,你已经'||age||'岁了' ) ;
END IF ;
IF (age >= 60) THEN
DBMS_OUTPUT.PUT_LINE(v_start_date||'是出生日期的第'|| i ||'个回文日,您都已经'||age||'岁了' ) ;
END IF ;
END if;
v_start_date := to_number(to_char(to_date(v_start_date,'yyyymmdd')+1,'yyyymmdd'));
end loop;
DBMS_OUTPUT.PUT_LINE('日期范围内一共有'||i ||'个回文日');
end;
测试结果: