`
wxlgzxx_1988
  • 浏览: 67826 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

自己编写的计算时间差值的Oracle函数 DateDiff

 
阅读更多

/**
*@author:wangxl
*计算两个时间的差值
*/
CREATE OR REPLACE FUNCTION DATEDIFF(I_DATE1 IN VARCHAR, I_DATE2 VARCHAR)
  RETURN VARCHAR AS
  TOTAL_SECONDS NUMBER;
  O_RESULT      VARCHAR2(50);
  DAYS          NUMBER;
  HOURS         NUMBER;
  MINUTES       NUMBER;
  SECONDS       NUMBER;
BEGIN
  IF (I_DATE1='SYSDATE') THEN
     SELECT CEIL((SYSDATE -
              TO_DATE(I_DATE2, 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 * 60)
      INTO TOTAL_SECONDS
      FROM DUAL;
    ELSE
       SELECT CEIL((TO_DATE(I_DATE1, 'yyyy-mm-dd hh24-mi-ss') -
              TO_DATE(I_DATE2, 'yyyy-mm-dd hh24-mi-ss')) * 24 * 60 * 60)
    INTO TOTAL_SECONDS
    FROM DUAL;
  END IF;

  DBMS_OUTPUT.PUT_LINE(TOTAL_SECONDS);
  DAYS    := FLOOR(TOTAL_SECONDS / (24 * 3600));
  HOURS   := FLOOR(TOTAL_SECONDS MOD(24 * 3600) / 3600);
  MINUTES := FLOOR(TOTAL_SECONDS MOD 3600 / 60);
  SECONDS := FLOOR(TOTAL_SECONDS MOD 60 );
/*
  DBMS_OUTPUT.PUT_LINE(DAYS);
  DBMS_OUTPUT.PUT_LINE(HOURS);
  DBMS_OUTPUT.PUT_LINE(MINUTES);
  DBMS_OUTPUT.PUT_LINE(SECONDS);
*/

  IF (DAYS > 0) THEN
    O_RESULT := DAYS || '天' || HOURS || '小时' || MINUTES || '分' || SECONDS || '秒';
  ELSE
    IF (DAYS = 0) THEN
      O_RESULT := HOURS || '小时' || MINUTES || '分' || SECONDS || '秒';
    END IF;
    IF (DAYS = 0 AND HOURS = 0) THEN
      O_RESULT := MINUTES || '分' || SECONDS || '秒';
    END IF;
  END IF;
  RETURN O_RESULT;
END;

 

调用方法:

1,传入系统时间和某个日期时间

SQL> SELECT datediff('sysdate','2011-08-16 12:11:34') datediff from dual;
 
DATEDIFF
--------------------------------------------------------------------------------
21小时7分26秒

2,传入两个varchar型的时间(注意:第一个时间要比第二个时间大)

 
SQL> SELECT datediff('2011-09-12 12:21:31','2011-08-16 12:11:34') datediff from dual;
 
DATEDIFF
--------------------------------------------------------------------------------
27天0小时9分57秒

 

分享到:
评论

相关推荐

    Oracle datediff函数

    在Oracle数据库系统中,...总之,虽然Oracle没有内置的`DATEDIFF`函数,但通过上述方法,我们可以轻松地计算两个日期之间的差异。这显示了Oracle数据库系统的灵活性和强大功能,使其能够适应各种不同的需求和工作场景。

    Oracle中实现datadiff函数

    在Oracle数据库中,并未直接提供`DATEDIFF`函数来计算两个日期之间的差异。这与SQL Server等其他数据库系统有所不同,在那些系统中,`DATEDIFF`是一个常用且非常实用的功能。然而,在Oracle中我们可以通过自定义函数...

    delphi、 sql 日期时间函数

    2. `DATEDIFF()`: 计算两个日期之间的差值,可按天、周、月等单位计算。 3. `CONVERT()`: 将日期时间值转换为字符串,或者将字符串转换为日期时间值,支持多种日期格式。 4. `GETDATE()`: 返回当前系统日期和时间。 ...

    SQLServer和Oracle常用函数对比

    - `DATEDIFF()` 计算两个日期之间的差值(天数)。 - `CONVERT()` 转换日期格式。 2. **Oracle:** - `SYSDATE` 获取当前日期和时间。 - `ADD_MONTHS()` 添加指定的月数。 - `NUMTODSINTERVAL()` 和 `TO_...

    oracle与sqlserver日期函数对比.docx

    Oracle 和 SQL Server 都是广泛使用的数据库管理系统,它们在处理日期和时间数据时提供了丰富的内置函数。下面是对这两个系统中日期函数的详细比较: 1. **日期相加/减**: - Oracle 使用 `ADD_MONTHS(date, ...

    SQL计算timestamp的差值的方法

    如果需要计算每个记录相对于序列中的其他记录的时间差,可以使用窗口函数,如`LAG()`或`LEAD()`,但这通常不涉及timestamp的直接差值计算,而是用于获取相邻行的timestamp值。 8. **时间区间计算**: 在查找某个...

    mysql 时间差及字符串时间转换

    在MySQL中,我们可以使用`DATEDIFF()`函数来计算两个日期或时间之间的差值,单位默认为天。这个函数接受两个日期或时间参数,返回它们之间的天数差。例如,计算当前时间(`NOW()`)与指定日期('2012-08-01 12:11:...

    SQL Server基本函数

    - `DATEDIFF()`: 计算两个日期之间的差值(单位可以是天、月、年等)。 - `DATEPART()`: 从日期中提取部分(如年、月、日)。 - `DATEFROMPARTS()`: 创建一个日期,使用指定的年、月、日部分。 4. 聚合函数: -...

    数据库 sql 函数大全

    - `datediff(datepart, date_expr1, date_expr2)`:计算两个日期之间的差值,单位由`datepart`决定。 - `dateadd(datepart, number, date_expr)`:在给定的日期上加上指定的日期部分数量。 5. **系统函数**: -...

    ORACLE和SQL语法区别归纳

    - **日期差值**:Oracle 使用 `MONTHS_BETWEEN`,SQL Server 使用 `DATEDIFF`。 - **当前日期**:Oracle 是 `SYSDATE`,SQL Server 是 `GETDATE()`。 - **特定日期计算**:Oracle 有 `LAST_DAY` 和 `NEXT_DAY`,...

    sql基础,函数调用,建立游标

    3. 日期/时间函数:如`DATEADD()`添加时间间隔,`DATEDIFF()`计算两个日期之间的差值,`CURRENT_DATE`获取当前日期。 函数调用通常嵌入到查询语句中,如`SELECT SUM(column_name) FROM table_name`,这将返回指定列...

    Sybase函数大全让你的SQL语言更通顺

    - **DATEDIFF**:计算两个日期之间的差值。 - 示例:`SELECT DATEDIFF(day, '2023-01-01', '2023-01-10');` 返回 `9`。 #### 4. 系统函数 - **USER**:返回当前登录用户的名称。 - 示例:`SELECT USER;` - **...

    【每日一步】数据库中日期函数功能比对.docx

    8. `datediff`:计算两个日期之间的差值(天数),`select datediff('2008-08-01', '2008-08-08')`返回-7,表示相差7天。 9. `sysdate`:返回当前系统日期,在Oracle中,`select sysdate from dual`可以获取当前...

    sql数据库基础知识整理,常用函数及常用语法

    `GETDATE()`提供当前系统时间,`DATEADD()`和`DATEDIFF()`用于日期的加减和计算两日期之间的差值,`DATEPART()`和`DATENAME()`提取日期的特定部分,如年、月、日等。`ISDATE()`检查输入值是否符合日期格式。 最后,...

    SQLServerOracle

    - **SQL Server**: `DATEDIFF(SS, GETDATE(), GETDATE() + 12.3)` 计算两个日期的时间差。 - **Oracle**: 可以通过两个日期相减得到时间间隔,然后乘以 24 * 60 * 60 转换为秒。 - **根据差值求新的日期** - **...

    sql函数

    3. **datediff(datepart,date_expr1,dateexpr2)**:计算两个日期之间的差值,并根据`datepart`参数返回相应的单位(天数、小时数等)。 4. **dateadd(datepart,number,date_expr)**:此函数在给定的日期上增加或...

    sql的各种日期输出

    `Datediff` 函数用于计算两个日期之间的差值,按照指定的时间间隔单位来计算。其语法为: ``` DATEDIFF(interval, date1, date2) ``` 例如,计算两个日期间的天数差: ``` SELECT DATEDIFF(day, '2004-09-01', '2004...

    如何获得两个小时之间的差值,而没有负值

    在SQL中,计算两个时间之间的差值通常涉及到日期和时间函数的应用。当你想要得到一个始终为正的小时差值时,这通常意味着你需要确保即使其中一个时间早于另一个,结果也不会出现负数。在这个问题中,我们可以使用...

    常用sql语句的收集

    `DATEDIFF`函数用于计算两个日期之间的差值,例如,找出`voter`表中`voteTime`字段与当前时间的秒数差: ```sql SELECT DATEDIFF(second, voteTime, GETDATE()) FROM voter ``` 5. **数据类型转换**: 转换...

Global site tag (gtag.js) - Google Analytics