zoukankan      html  css  js  c++  java
  • 获取时间段数据

    create or replace function getDateDuan(vChuSSJ varchar2,aFlag varchar2) return integer as
    vDate date;
    p_nl_str varchar2(20);
    p_nl_s number;
    p_nl_y number;
    p_nl_t number;
    p_nl_xs number;
    p_rtnmsg varchar2(200);
    p_dbmsg varchar2(200);
    begin
    vDate := to_date(vChuSSJ,'yyyy-MM-dd hh24:mi:ss');
    prc_get_age(vDate,p_nl_str,p_nl_s,p_nl_y ,p_nl_t,p_nl_xs,p_rtnmsg,p_dbmsg);

    if aFlag = '岁' then
    return p_nl_s;
    end if;

    if aFlag = '月' then
    return p_nl_y;
    end if;

    if aFlag = '天' then
    return p_nl_t;
    end if;

    if aFlag = '时' then
    return p_nl_xs;
    end if;

    end;

    -------------------------------------------------------------------------------------

    CREATE OR REPLACE PROCEDURE prc_get_age(p_bir DATE, --出生日期
    p_nl_str OUT VARCHAR2, --年龄 N岁(包含中文)
    p_nl_s OUT NUMBER, --岁
    p_nl_y OUT NUMBER, --月
    p_nl_t OUT NUMBER, --天
    p_nl_xs OUT NUMBER, --小时
    p_rtnmsg OUT VARCHAR2, --1成功, 其它失败
    p_dbmsg OUT VARCHAR2 --数据库错误信息
    ) IS
    --解析年龄 岁 月 天
    v_i NUMBER;
    BEGIN
    p_rtnmsg := '1';

    --出生日期不为空
    IF p_bir IS NULL THEN
    p_rtnmsg := '计算年龄时,出生日期不能为空!';
    RETURN;
    END IF;

    --判断出生日期与当前时间
    IF p_bir > SYSDATE THEN
    p_rtnmsg := '计算年龄时,出生日期不能大于当前日期!';
    RETURN;
    END IF;

    v_i := MONTHS_BETWEEN(SYSDATE, p_bir);

    p_nl_s := TRUNC(v_i / 12);
    p_nl_y := TRUNC(MOD(v_i, 12));
    p_nl_t := TRUNC(SYSDATE - ADD_MONTHS(p_bir, TRUNC(v_i)));

    p_nl_xs := 0; --默认0
    --若年龄 岁、月、天 都为0时,计算小时
    IF p_nl_s = 0
    AND p_nl_y = 0
    AND p_nl_t = 0 THEN
    p_nl_xs := ROUND((SYSDATE - p_bir) * 24); --小时
    END IF;

    --返回拼接 年龄 中文 两种方式
    --返回拼接年龄中文, 对应 岁、月、天
    IF p_nl_s < 1
    AND p_nl_y > 0 THEN
    p_nl_str := TO_CHAR(p_nl_y) || '月';
    ELSIF p_nl_s < 1
    AND p_nl_y = 0 THEN
    p_nl_str := TO_CHAR(p_nl_t) || '天';
    ELSE
    p_nl_str := TO_CHAR(p_nl_s) || '岁';
    END IF;
    /*--返回拼接年龄中文, 分区间 {0~1},{1~7},{7~∞}
    IF (p_nl_s >= 7) THEN
    p_nl_str := TO_CHAR(p_nl_s) || '岁';
    ELSIF (p_nl_s >= 1)
    AND (p_nl_s < 7) THEN
    p_nl_str := TO_CHAR(p_nl_s) || '岁' || TO_CHAR(p_nl_y) || '月';
    ELSE
    p_nl_str := TO_CHAR(p_nl_y) || '月' || TO_CHAR(p_nl_t) || '天';
    END IF;*/

    EXCEPTION
    WHEN OTHERS THEN
    p_rtnmsg := '获取年龄发生错误,请联系管理员!';
    p_dbmsg := DBMS_UTILITY.FORMAT_ERROR_BACKTRACE || SQLERRM;
    END prc_get_age;

  • 相关阅读:
    项目Alpha冲刺Day7
    项目Alpha冲刺Day5
    项目Alpha冲刺Day6
    Alpha冲刺总结
    测试随笔
    项目Alpha冲刺Day12
    高校征信系统项目Postmortem结果
    冲刺合集
    总结随笔
    测试工作安排
  • 原文地址:https://www.cnblogs.com/maweiwei/p/13937779.html
Copyright © 2011-2022 走看看