之前写过sqlserver的这种函数,链接在这里。其实oracle的和msserver的一样,只是有些获取时间的函数不太一样,在此仅做记录。
create or replace function 换算_时间描述( p输入时间 DATE)
RETURN VARCHAR2
AS
当前时间 DATE;
当前日期 DATE;
昨天日期 DATE;
当前时刻 VARCHAR(50);
本周一日期 DATE;
当前年份 VARCHAR(20);
输入日期 DATE;
输入时刻 VARCHAR2(50);
所在周 VARCHAR2(50);
输入年份 VARCHAR2(20);
输入月 VARCHAR2(10);
输入日 VARCHAR2(10);
输入时 VARCHAR2(10);
输入分 VARCHAR2(10);
返回字符串 VARCHAR2(50);
BEGIN
当前时间:=sysdate;
当前日期:=当前时间;
昨天日期:=当前时间-1;
当前时刻:= to_char(当前时间,'HH24:Mi:ss');
本周一日期:= trunc(当前时间,'iw');
当前年份:= extract(year from 当前时间);
输入日期:= p输入时间;
输入时刻:= to_char(p输入时间,'HH24:Mi:ss');
所在周:= case to_number(to_char(p输入时间,'D'))-1 when 0 then 7 else to_number(to_char(p输入时间,'D'))-1 end;
输入年份:= extract(year from p输入时间);
输入月:= extract(month from p输入时间);
输入日:= extract(day from p输入时间);
输入时:= extract(hour from p输入时间);
输入分:= extract(minute from p输入时间);
BEGIN
IF 当前日期=输入日期 THEN 返回字符串:=输入时||':'||输入分;
ELSE IF 昨天日期=输入日期 THEN 返回字符串:='昨天';
ELSE IF (本周一日期<=输入日期 AND 输入日期<当前日期)THEN 返回字符串:=所在周;
ELSE IF 当前年份=输入年份 THEN 返回字符串:=输入月||'-'||输入日;
ELSE IF 当前年份<>输入年份 THEN 返回字符串:=输入日期;
ELSE 返回字符串:='时间计算出错';
END IF;
END IF;
END IF;
END IF;
END IF;
END;
RETURN 返回字符串;
END;
测试:
select 换算_时间描述(sysdate-50) from dual;