1.日期时间间隔操作
-- 当前时间减去7分钟的时间
SELECT SYSDATE, SYSDATE - INTERVAL '7' MINUTE FROM dual;
-- 当前时间减去7小时的时间
SELECT SYSDATE - INTERVAL '7' HOUR FROM dual;
-- 当前时间减去7天的时间
SELECT SYSDATE - INTERVAL '7' DAY FROM dual;
-- 当前时间减去7月的时间
SELECT SYSDATE, SYSDATE - INTERVAL '7' MONTH FROM dual;
-- 当前时间减去7年的时间
SELECT SYSDATE, SYSDATE - INTERVAL '7' YEAR FROM dual;
-- 时间间隔乘以一个数字
SELECT SYSDATE, SYSDATE - 8 * INTERVAL '2' HOUR FROM dual;
-- 查询昨天时间
SELECT TO_CHAR(SYSDATE -1, 'yyyy-mm-dd hh24:mi:ss') FROM dual;
2.日期到字符操作
-- 取当前系统时间
SELECT SYSDATE FROM DUAL;
-- 取当前日期
SELECT TRUNC(SYSDATE) FROM dual;
-- 取当前月的第一天
SELECT TRUNC(SYSDATE, 'MM') FROM dual;
-- 取当年的元旦
SELECT TRUNC(SYSDATE, 'YYYY') FROM dual;
-- 取当前时间秒部分
SELECT TO_CHAR(SYSDATE, 'ss') FROM dual;
-- 取当前时间分钟部分
SELECT TO_CHAR(SYSDATE, 'mi') FROM dual;
-- 取当前时间秒小时部分
SELECT TO_CHAR(SYSDATE, 'HH24') FROM dual;
-- 取当前时间日期部分
SELECT TO_CHAR(SYSDATE, 'DD') FROM dual;
-- 取当前时间月部分
SELECT TO_CHAR(SYSDATE, 'MM') FROM dual;
-- 取当前时间年部分
SELECT TO_CHAR(SYSDATE, 'YYYY') FROM dual;
-- 取当前时间是一个月中的第几周(从1日开始算)
SELECT TO_CHAR(SYSDATE, 'w') FROM dual;
-- 取当前时间是一年中的第几周(从1.1开始算)
SELECT TO_CHAR(SYSDATE, 'ww') FROM dual;
-- 取当前时间是一年中的第几周(按实际日历的)
SELECT TO_CHAR(SYSDATE, 'iw') FROM dual;
-- 取当前时间是一周的第几天,从星期天开始,周六结束
SELECT TO_CHAR(SYSDATE, 'd') FROM dual;
-- 取当前日是星期几,和数据库设置的字符集有关,会输出'Tuesday'
SELECT TO_CHAR(SYSDATE, 'day') FROM dual;
-- 当前日是一年中的第几天
SELECT TO_CHAR(SYSDATE, 'ddd') FROM dual;
-- 时间转对应格式的字符串时间
SELECT SYSDATE, TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss') FROM dual;
SELECT SYSDATE, TO_CHAR(SYSDATE, 'yyyy-mm-dd hh:mi:ss') FROM dual;
SELECT SYSDATE, TO_CHAR(SYSDATE, 'yyyy-ddd hh:mi:ss') FROM dual;
SELECT SYSDATE, TO_CHAR(SYSDATE, 'yyyy-mm iw-d hh:mi:ss') FROM dual;
- 字符到日期操作
-- 具体用法和上面的to_char差不多
SELECT TO_DATE('2003-10-17 21:15:37', 'yyyy-mm-dd hh24:mi:ss') FROM dual;
- trunk/ ROUND函数的使用
SELECT TRUNC(SYSDATE, 'YEAR') FROM dual;
SELECT TRUNC(SYSDATE) FROM dual;
SELECT TO_CHAR(TRUNC(SYSDATE, 'YYYY'), 'YYYY') FROM dual;
5.Oracle有毫秒级的数据类型(DataTime类型)
--返回当前时间 年月日小时分秒毫秒
SELECT TO_CHAR(CURRENT_TIMESTAMP(5), 'DD-MON-YYYY HH24:MI:SSxFF') FROM dual;
--返回当前 时间的秒毫秒,可以指定秒后面的精度(最大=9)
SELECT TO_CHAR(CURRENT_TIMESTAMP(9), 'MI:SSxFF') FROM dual;
- Oracle中日期比较大小
--如果字段本身就是date型
TO_CHAR(DATE, 'yyyy-mm') <= TO_CHAR(SYSDATE, 'yyyy-mm');
--如果字段本身不是date型
(TO_DATE(DATE, 'yyyy-mm'), 'yyyy-mm') <= TO_CHAR(TO_DATE('2022-02-11 10:58:28'), 'yyyy-mm');
-- oracle的between and函数会包含前后边界,除非该边界被另外一个分组占用
SELECT 1 FROM DUAL WHERE TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss') BETWEEN '2022-02-12 00:00:00' AND '2022-02-12 23:59:59';