oracle round日期函数 天数如何四舍五入

oracle round日期函数 天数如何四舍五入?
以 1999.11.21 10:31:11 为例
格式 结果
---------------------------------------------------------------------------
SS 1999.11.24 10:31:11
MI 1999.11.24 10:31:00
HH 1999.11.24 11:00:00
DD 1999.11.24 00:00:00
MM 1999.12.01 00:00:00
YY 2000.01.01 00:00:00

这个天数 怎么四舍五入到24号的?无法理解。求高手解释。

首先你的例子数据错了,不是21号,应该是24号。这样就没问题了。
看你列出的数据,应该是格式由小到大,逐步四舍五入的一个过程。
这个算法如下:

round(带小时分秒日期, 格式)

格式是 秒SS,精确到秒。
分MI,到分,秒数30是分界线,相当于四舍五入的5,如果秒超过30,向前进1
时HH,如果分超过30,向前进1
日DD, 如果小时超过12,向前进1
月MM,16号是临界,相当于四舍五入的5,如果超过16号,向前进1
年YY,超过7月,向前进1

对应的语句分别是
select to_date('1999-11-24 10:31:11','yyyy-mm-dd hh24:mi:ss') from dual;
select round(to_date('1999-11-24 10:31:11','yyyy-mm-dd hh24:mi:ss'),'mi') from dual;
select round(to_date('1999-11-24 10:31:11','yyyy-mm-dd hh24:mi:ss'),'hh') from dual;
select round(to_date('1999-11-24 10:31:11','yyyy-mm-dd hh24:mi:ss'),'dd') from dual;
select round(to_date('1999-11-24 10:31:11','yyyy-mm-dd hh24:mi:ss'),'mm') from dual;
select round(to_date('1999-11-24 10:31:11','yyyy-mm-dd hh24:mi:ss'),'yy') from dual;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-04
--讲解:年份按**1-6月和7-12月**四舍五入到最近的 几几年1月1日
select round(to_date('6-2月-13'),'year') from dual;
select round(to_date('6-5月-13'),'year') from dual;
select round(to_date('6-7月-13'),'year') from dual;

--讲解:月份按**1-15日和16-30日**四舍五入到最近的 几月1日
select round(to_date('15-2月-13'),'month') from dual;
select round(to_date('16-2月-13'),'month') from dual;

--讲解:天数按**周一-周三和周四到周日**四舍五入到最近的 周日
--去掉注释不然会有错误测试:

select round(to_date('3-2月-13'),'day') from dual;--周日
select round(to_date('4-2月-13'),'day') from dual;--周一
select round(to_date('5-2月-13'),'day') from dual;--周二
select round(to_date('6-2月-13'),'day') from dual;--周三
以上都是2月3日

以下都是2月10日
select round(to_date('7-2月-13'),'day') from dual;--周四
select round(to_date('8-2月-13'),'day') from dual;--周五
select round(to_date('9-2月-13'),'day') from dual;--周六
select round(to_date('10-2月-13'),'day') from dual;--周日
第2个回答  2017-07-01
CREATE OR REPLACE FUNCTION f_RoundDate(uDate IN Date,FMT VARCHAR2)
/***
  oracle round日期函数 天数如何四舍五入?
  以 1999.11.21 10:31:11 为例 
  格式 结果 
  ---------------------------------------------------------------------------
  SS 1999.11.24 10:31:11
  MI 1999.11.24 10:31:00
  HH 1999.11.24 11:00:00
  DD 1999.11.24 00:00:00
  MM 1999.12.01 00:00:00
  YY 2000.01.01 00:00:00

  SELECT f_RoundDate(TO_DATE('1999.11.21 10:31:11','YYYY-MM-DD HH24:MI:SS'),'SS') FROM DUAL;
***/
RETURN DATE
IS
  uReturn DATE;               -- 返回日期
BEGIN
  uReturn := uDate;

  IF (FMT = 'SS') THEN           -- 秒
    uReturn := uDate;
  ELSIF (FMT = 'MI') THEN        -- 分
    uReturn := Round(uDate,'MI');
  ELSIF (FMT = 'HH') THEN        -- 时
    uReturn := Round(uDate,'HH24');
  ELSIF (FMT = 'DD') THEN        -- 日
    uReturn := Round(uDate,'DAY');
  ELSIF (FMT = 'MM') THEN        -- 月
    uReturn := Round(uDate,'month');
  ELSIF (FMT = 'YY') THEN        -- 年
    uReturn := Round(uDate,'year');
  END IF;
  
  RETURN (uReturn);
END f_RoundDate;

第3个回答  2017-07-01
oracle中的round函数是用来将数值四舍五入的。语法:round(number,digits)其中number是要进行四舍五入的数值,digits是保留的小数位数。举例:要将三个人的身高四舍五入保留1位小数,可用如下语句:select id,姓名,round(身高,1) from person;运行结果:
第4个回答  2011-08-24
DD 1999.11.24 00:00:00 你现在是上午的10点多,是应该舍到24号的