下面是一些使用 Oracle 数据库中处理时间的函数的 SQL 查询示例:
- SYSDATE - 获取当前日期和时间:

- CURRENT_DATE - 获取当前日期:

- SYSTIMESTAMP - 获取当前日期和时间及时区信息:

- CURRENT_TIMESTAMP - 获取当前日期和时间及时区信息:

可以看出
- SYSDATE 和 CURRENT_DATE 输出的值都是一样的
- SYSTIMESTAMP 和 CURRENT_TIMESTAMP 输出的值都是一样的
- SYSTIMESTAMP 比起 SYSDATE 会额外输出毫秒值和时区,其他一样
- CURRENT_TIMESTAMP 比起 CURRENT_DATE 会额外输出毫秒值和时区,其他一样

- EXTRACT - 提取日期/时间的一部分:
例如通过EXTRACT 函数提取年、月、日

例如通过EXTRACT 函数提取时、分、秒
注意:
- 获取时分秒,不能用SYSDATE,只能用SYSTIMESTAMP
- 获取时分秒,不能用CURRENT_DATE,只能用CURRENT_TIMESTAMP

- ADD_MONTHS - 向日期添加指定月数:

- MONTHS_BETWEEN - 计算两个日期之间的月数差:
注意:这里只有 MONTHS_BETWEEN 有效。YEARS_BETWEEN 和 DAYS_BETWEEN 这两个都是无效函数

- NEXT_DAY - 获取下一个指定星期几的日期:

- LAST_DAY - 获取月份的最后一天:

- ROUND - 对日期进行四舍五入:

- TRUNC - 截断日期到指定精度:
注意:TRUNC 可以截取到 年、月、日、时、分,但是没有秒

- TO_CHAR - 将日期/时间转换为字符串:

- TO_DATE - 将字符串转换为日期:

- TO_TIMESTAMP - 将字符串转换为时间戳:

TO_DATE 和 TO_TIMESTAMP 效果是一样的

- NEW_TIME - 将一个时区的时间转换为另一个时区的时间:

所有的时区如下

下面是一些使用 Oracle 数据库中处理时间的函数的 SQL 查询示例:
可以看出
例如通过EXTRACT 函数提取年、月、日
例如通过EXTRACT 函数提取时、分、秒
注意:
注意:这里只有
MONTHS_BETWEEN有效。YEARS_BETWEEN和DAYS_BETWEEN这两个都是无效函数SELECT MONTHS_BETWEEN(SYSDATE, TO_DATE('2023-01-01', 'YYYY-MM-DD')) AS MonthsDifference FROM dual;SELECT SYSDATE, ROUND(SYSDATE, 'MONTH'), ROUND(TO_DATE('2024-04-10 20:12:30', 'YYYY-MM-DD HH24:MI:SS'), 'MONTH') FROM DUAL;注意:TRUNC 可以截取到 年、月、日、时、分,但是没有秒
SELECT TO_DATE('2024-04-20', 'YYYY-MM-DD') AS DateFromString FROM DUAL;SELECT TO_TIMESTAMP('2024-04-20 12:34:56', 'YYYY-MM-DD HH24:MI:SS') AS TimestampFromString FROM DUAL;TO_DATE和TO_TIMESTAMP效果是一样的SELECT TO_DATE('2024-04-20 12:34:56', 'YYYY-MM-DD HH24:MI:SS') AS DateFmt, TO_TIMESTAMP('2024-04-20 12:34:56', 'YYYY-MM-DD HH24:MI:SS') AS TimestampFmt FROM DUAL;所有的时区如下