ORACLE日期相关语法

一、日期格式

1.1 日期格式
  1. YYYY-MM-DD 年-月-日
  2. HH24:MI:SS 时:分:秒(HH12、HH : 均为 12 小时制 )
sql 复制代码
select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') 当前时间 from dual;
1.2 注意:一周的第一天是周日
1.3 日期展示示例
sql 复制代码
SELECT SYSDATE 当前时间,
       trunc(SYSDATE) 今日0点,
       trunc(SYSDATE) + 6 / 24 当天6点,
       to_char(SYSDATE, 'YYYY') 四位年,
       to_char(SYSDATE, 'YY') 两位年,
       to_char(SYSDATE, 'MM') 月份,
       to_char(SYSDATE, 'MONTH') 月份带月份名,
       to_char(SYSDATE, 'MON') 月份带月份名简称,
       to_char(SYSDATE, 'RM') 月份罗马数字,
       to_char(SYSDATE, 'DDD') 当年第n天,
       to_char(SYSDATE, 'DD') 当月第n天,
       to_char(SYSDATE, 'D') 当周第n天,
       to_char(SYSDATE, 'DY') 星期几,
       to_char(SYSDATE, 'Q') 当年第n季度,
       to_char(SYSDATE, 'WW') 当年第n周,
       to_char(SYSDATE, 'W') 本月第n周,
       to_char(SYSDATE, 'HH24') 24小时制,
       to_char(SYSDATE, 'HH12') 12小时制
  FROM dual;

二、常用日期函数

2.1 字符串转换为日期:to_date()
sql 复制代码
select to_date('2023-11-07 16:35:33', 'yyyy-mm-dd hh24:mi:ss') result from dual;
2.2 返回特定日期月份的最后一天:last_day()
SQL 复制代码
select last_day(sysdate) from dual;
2.3 增加或减去月份:add_months()
sql 复制代码
-- 增加一个月
select add_months(sysdate, 1) result from dual;
-- 减少一个月
select add_months(sysdate, -1) result from dual;
-- 前一天
select sysdate - 1 from dual;
-- 后一天
select sysdate + 1 from dual;
2.4 比较两个时间的月份差:months_between(date1, date2)
sql 复制代码
select months_between(sysdate, to_date('2023-02-22', 'yyyy-mm-dd')) from dual;

三、项目实例

3.1 加减时间
sql 复制代码
SELECT SYSDATE "当前时间",
       SYSDATE + 1 "加一天",
       SYSDATE - 1 "减一天",
       SYSDATE + (1 / 24) "加一小时",
       SYSDATE + (1 / 24 / 60) "加一分钟",
       SYSDATE + (1 / 24 / 60 / 60) "加一秒钟"
  FROM dual;
3.2 判断当前时间为星期几、几月份、年份
sql 复制代码
-- 判断周几:每周的第一天为星期天,星期一为第二天,所以要减一
SELECT to_char(SYSDATE, 'D') - 1 FROM dual; 
-- 直接输出今日周几
SELECT to_char(sysdate, 'day') FROM dual; 
-- 判断特定日期是星期几
select to_char(to_date('2023-11-11', 'YYYY-MM-DD'), 'DY') from dual;
-- 输出特定日期的月份、年份
SELECT to_char(to_date('2023-11-11', 'YYYY-MM-DD'), 'MM') 当前月份,
       to_char(to_date('2023-11-11', 'YYYY-MM-DD'), 'YYYY') 当前年份
  FROM dual;
SELECT trunc(SYSDATE, 'DD') 今天的开始,
       trunc(SYSDATE, 'iw') 这周的第一天,
       trunc(SYSDATE, 'MM') 这个月的第一天,
       trunc(SYSDATE, 'q') 这个季度的第一天,
       trunc(SYSDATE, 'YYYY') 今年第一天,
       extract(day from last_day(sysdate)) 当月天数
  FROM dual; 
3.3 两个时间的时间差
sql 复制代码
SELECT TIME 具体相差时间,
       floor(TIME) 相差天数,
       CASE
         WHEN TIME < 1 THEN
          trunc(TIME * 24)
         WHEN TIME > 1 THEN
          MOD(trunc(TIME * 24), 24)
         ELSE
          0
       END AS 小时差,
       trunc(TIME * 24 * 60 - 60 * trunc(TIME * 24)) 分钟差,
       trunc(TIME * 24 * 60 * 60 - 60 * trunc(TIME * 24 * 60)) 秒差
  FROM (SELECT to_number(SYSDATE - to_date('1999-02-22 20:20:20', 'YYYY-MM-DD hh24:mi:ss')) AS TIME
          FROM dual)
3.4 判断当前时间是今年的那一天
sql 复制代码
SELECT to_char(SYSDATE, 'D') - 1 本周第几天,
       to_char(SYSDATE, 'DD') 本月第几天,
       to_char(SYSDATE, 'DDD') 本年第几天
  FROM dual;
相关推荐
银发控、7 小时前
MySQL联合索引
数据库·mysql
予枫的编程笔记7 小时前
【MySQL修炼篇】从踩坑到精通:事务隔离级别的3大异常(脏读/幻读/不可重复读)解决方案
数据库·mysql·后端开发·数据库事务·事务隔离级别·rr级别·脏读幻读不可重复读
一起养小猫9 小时前
Flutter for OpenHarmony 实战:记账应用数据统计与可视化
开发语言·jvm·数据库·flutter·信息可视化·harmonyos
世界尽头与你9 小时前
(修复方案)CVE-2023-22047: Oracle PeopleSoft Enterprise PeopleTools 未授权访问漏洞
数据库·安全·oracle·渗透测试
韩立学长9 小时前
【开题答辩实录分享】以《智能大学宿舍管理系统的设计与实现》为例进行选题答辩实录分享
数据库·spring boot·后端
Henry Zhu1239 小时前
数据库(五):反规范化
数据库
Mr_Xuhhh10 小时前
MySQL函数详解:日期、字符串、数学及其他常用函数
java·数据库·sql
he___H10 小时前
Redis高级数据类型
数据库·redis·缓存
霖霖总总11 小时前
[小技巧60]深入解析 MySQL Online DDL:MySQL Online DDL、pt-osc 与 gh-ost 机制与最佳实践
数据库·mysql
爱学习的阿磊11 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python