--给你一个计算年龄的方法吧 ------------------------------------------- --取得年龄精确到月 ------------------------------------------- FUNCTION GET_NL_MONTH(V_YEAR IN NUMBER, V_MON IN NUMBER, V_AAC006 IN VARCHAR2) RETURN NUMBER IS RESULT NUMBER; V_FLAG NUMBER DEFAULT 0; BEGIN BEGIN IF V_MON >= TO_NUMBER(SUBSTR(V_AAC006, 5, 2)) THEN V_FLAG := 1; END IF; RESULT := V_YEAR - TO_NUMBER(SUBSTR(V_AAC006, 1, 4)) + V_FLAG; EXCEPTION WHEN OTHERS THEN RESULT := 40; END; RETURN(RESULT); END; 其中V_AAC006为出生日期,V_YEAR可改为系统当前年,V_MON可改为系统当前月,lz的需求可以将v_year与v_mon作为一个字段传入
呵,支持,lz可以用我一楼写的函数,然后直接 select no,name,birthday ,GET_NL_MONTH(to_number(substr(to_char(sysdate,'yyyymm')),1,4),to_number(substr(to_char(sysdate,'yyyymm')),5,2),birthday) from student 就可得到你想要的结果
这个东西要用触发器吗。 直接一条语句不久实现吗 select (sysdate-birth_date) from student where name='xx'
方法都已经写出来了,还不会用啊,直接在plsql中新建一个方法,把我写的那个function贴上去,按f8执行,然后在sql窗体执行select no,name,birthday ,GET_NL_MONTH(to_number(substr(to_char(sysdate,'yyyymm')),1,4),to_number(substr(to_char(sysdate,'yyyymm')),5,2),birthday) from student这句sql
--建表 create table AA1 ( NUM NUMBER, NAME VARCHAR2(10), BIRTHDAY DATE ) ------------ select * from aa1; 1 王五 1982-6-1 ------函数 create or replace function test003(birthday in date) return number is age number;begin age:=to_char(sysdate,'yyyy')-to_char(birthday,'yyyy'); return(age); end; --调用函数 select num,name,birthday,test003(birthday) as age from aa1 --显示结果 1 王五 1982-6-1 26
--给你一个计算年龄的方法吧
-------------------------------------------
--取得年龄精确到月
-------------------------------------------
FUNCTION GET_NL_MONTH(V_YEAR IN NUMBER,
V_MON IN NUMBER,
V_AAC006 IN VARCHAR2) RETURN NUMBER IS
RESULT NUMBER;
V_FLAG NUMBER DEFAULT 0;
BEGIN
BEGIN
IF V_MON >= TO_NUMBER(SUBSTR(V_AAC006, 5, 2)) THEN
V_FLAG := 1;
END IF;
RESULT := V_YEAR - TO_NUMBER(SUBSTR(V_AAC006, 1, 4)) + V_FLAG;
EXCEPTION
WHEN OTHERS THEN
RESULT := 40;
END;
RETURN(RESULT);
END;
其中V_AAC006为出生日期,V_YEAR可改为系统当前年,V_MON可改为系统当前月,lz的需求可以将v_year与v_mon作为一个字段传入
我能帮你写这样一个函数,比如函数名称叫NL(),
你调用的时候
select no,name,birthday ,nl(birthday) from student
--返回
001 李四 1980-10-01 28
需要吗?
select no,name,birthday ,GET_NL_MONTH(to_number(substr(to_char(sysdate,'yyyymm')),1,4),to_number(substr(to_char(sysdate,'yyyymm')),5,2),birthday) from student 就可得到你想要的结果
直接一条语句不久实现吗
select (sysdate-birth_date) from student where name='xx'
--建表
create table AA1
(
NUM NUMBER,
NAME VARCHAR2(10),
BIRTHDAY DATE
)
------------
select * from aa1;
1 王五 1982-6-1
------函数
create or replace function test003(birthday in date) return number is
age number;begin
age:=to_char(sysdate,'yyyy')-to_char(birthday,'yyyy');
return(age);
end;
--调用函数
select num,name,birthday,test003(birthday) as age from aa1
--显示结果
1 王五 1982-6-1 26