Oracle 时间函数主要通过 SYSDATE、SYSTIMESTAMP 获取当前时间,利用 TO_DATE 和 TO_CHAR 进行类型转换与格式化。常用技巧包括使用 ADD_MONTHS 进行月份加减,MONTHS_BETWEEN 计算月数差,以及 EXTRACT 提取特定时间部分。提升效率方面,建议根据精度需求选择 DATE 或 TIMESTAMP 类型,使用 TRUNC 函数截断时间部分以便进行日期比较,避免在索引列上直接使用函数导致索引失效,同时合理使用时区函数如 DBTIMEZONE 确保时间一致性。掌握这些函数能有效提高 SQL 查询的灵活性和准确性。
ORACLE 函数之日期时间运算函数 [通俗易懂]
1 ADD_MONTHS 格式:ADD_MONTHS(D,N) 说明:返回日期时间 D 加 N 月后相应的日期时间。N 为正时则表示 D 之后;N 为负时则表示为 D 之前。N 为小数则会自己主动先删除小数部分,而用整数部分 举例:SQL>SELECT ADD_MONTHS(SYSDATE,7) A,ADD_MONTHS(SYSDATE,-7) B,ADD_MONTHS(SYSDATE,7.9)C FROM DUAL; A B C ————————————- —————— 2015/1/2016:07:02 2013/11/20 16:07:02 2015/1/20 16:07:02 2 CURRENT_DATE 格式:CURRENT_DATE 说明:返回当前会话时区所相应的日期 举例:SQL> SELECTCURRENT_DATE A FROM DUAL; A ——————- 2014/6/2016:09:04 3 CURRENT_TIMESTAMP 格式:CURRENT_TIMESTAMP([P]) 说明:返回当前会话时区所相应的日期时间时间戳。P 为精度,能够是 O—9 之间的一个整数,默觉得 6 举例:SQL>SELECT CURRENT_TIMESTAMP A,CURRENT_TIMESTAMP(9) B FROM DUAL; A B ———————————————————————————————- 20-6 月 -14 04.12.33.402000 下午 +08:00 20-6 月 -1404.12.33.402000000 下午 +08:00 4 DBTIMEZONE 格式:DBTIMEZONE 说明:返回数据库时区 举例:SQL>SELECT DBTIMEZONE A FROM DUAL; A —— +00:00 5 EXTRACT 格式:EXTRACT(C,FROM D) 说明:返回日期时间 D 中指定的部分 C。C 的取值为 YEAR,MONTH。DAY,HOUR,MINUTE,SECOND,TIMEZONE_HOUR,TIMEZONE_MINUTE, TIMEZONE_REGION, TIMEZONE_ABBR。指定的 C 必须在 D 中存在 举例:抽取年月日 SQL>SELECT EXTRACT(YEAR FROM SYSDATE) A,EXTRACT(MONTH FROM SYSDATE) B,EXTRACT(DAYFROM SYSDATE) C FROM DUAL; A B C ——————–———- 2014 6 20 抽取时分秒不能从 SYSDATE 中抽取。SYSTIMESTAMP 返回的 UTC 标准时间 SQL>SELECT EXTRACT(HOUR FROM SYSTIMESTAMP) A,EXTRACT(MINUTE FROM SYSTIMESTAMP)B,EXTRACT(SECOND FROM SYSTIMESTAMP) C FROM DUAL; A B C ——————–———- 8 26 50.052 6 LAST_DAY 格式:LAST_DAY(D) 说明:返回日期 D 所在月份的最后一天 举例:SQL>SELECT LAST_DAY(SYSDATE) A FROM DUAL; A —————— 2014/6/3016:40:08
【Oracle11g SQL 详解】日期和时间函数:SYSDATE、TO_DATE、TO_CHAR 等
日期和时间函数:SYSDATE、TO_DATE、TO_CHAR 等 在 Oracle 数据库中,日期和时间函数用于处理日期和时间数据。它们在记录创建时间、分析时间间隔、格式化输出等场景中非常重要。本文将详细讲解常用的日期和时间函数及其应用。一、SYSDATE:获取当前系统日期和时间 1. 功能 SYSDATE 返回数据库服务器当前的日期和时间。2. 语法 SYSDATE AI 写代码 1 3. 示例 SELECT SYSDATE AS current_date FROM dual; -- 结果:2024-12-11 14:30:45 AI 写代码 1 2 3 4. 提取日期的部分信息 可以结合其他函数提取日期部分:SELECT EXTRACT(YEAR FROM SYSDATE) AS current_year, EXTRACT(MONTH FROM SYSDATE) AS current_month, EXTRACT(DAY FROM SYSDATE) AS current_day FROM dual; -- 结果:2024 | 12 | 11 AI 写代码 1 2 3 4 5 6 二、TO_DATE:将字符串转换为日期 1. 功能 TO_DATE 函数将字符串格式的日期转换为 Oracle 的日期类型。2. 语法 TO_DATE(string, format_model) AI 写代码 1 string:待转换的日期字符串。format_model:指定字符串的格式。3. 常用格式符号 格式符 描述 YYYY 四位年份 MM 两位月份 DD 两位日期 HH24 24 小时制小时 MI 分钟 SS 秒 4. 示例 SELECT TO_DATE('2024-12-11 14:30:45', 'YYYY-MM-DD HH24:MI:SS') AS converted_date FROM dual; -- 结果:2024-12-11 14:30:45 AI 写代码 1 2 3 三、TO_CHAR:将日期转换为字符串 1. 功能 TO_CHAR 函数将日期类型的数据转换为指定格式的字符串。2. 语法 TO_CHAR(date, format_model)
深入掌握 Oracle 日期处理:函数全解析
简介:Oracle 数据库广泛应用于企业级应用,其日期函数对于处理日期和时间数据至关重要。文章详细介绍了 Oracle 中的日期函数,包括日期加减运算、日期比较、格式化、转换、时间间隔计算、时间部分操作等,并通过实例阐述了这些函数在实际工作中的应用。掌握这些函数能够有效提高 SQL 查询的效率和灵活性。1. Oracle 日期类型及其精确度 1.1 Oracle 中的日期数据类型 在 Oracle 数据库中,处理日期和时间的数据类型主要有 DATE 和 TIMESTAMP。DATE 类型可以存储日期和时间,精确到秒,而 TIMESTAMP 类型不仅存储了 DATE 类型的所有信息,还能够存储亚秒级的时间戳信息。1.2 理解日期精确度 DATE 类型的精确度默认是到秒,但是 Oracle 允许时间戳精确到纳秒级别。精确度的高低直接影响到时间运算的准确性。正确理解 Oracle 中日期类型的精确度,对于确保数据的准确性至关重要。1.3 日期类型的应用场景 在业务应用中,根据实际需求选择适当的日期类型。例如,如果业务场景涉及到需要极高时间精度的事件处理 (如金融市场交易记录),TIMESTAMP 将是更佳选择。而在大多数日常应用中,DATE 类型足以满足需求。-- 示例代码,创建表并插入不同类型的日期数据 CREATETABLEsales ( sale_id NUMBER, sale_dateDATE,-- 使用 DATE 类型 sale_timestampTIMESTAMP-- 使用 TIMESTAMP 类型 ); INSERTINTOsales (sale_id, sale_date, sale_timestamp)VALUES(1, SYSDATE,CURRENT_TIMESTAMP);
oracle 日期时间函数总结
一、经常使用日期数据格式 1. 获取年的最后一位,两位,三位,四位 select to_char(sysdate,'Y') from dual; — 获取年的最后一位 select to_char(sysdate,'YY') from dual; — 获取年的最后两位 select to_char(sysdate,'YYY') from dual; — 获取年的最后三位 select to_char(sysdate,'YYYY') from dual; — 获取年的最后四位 2. 获取当前季度 select to_char(sysdate,'Q') from dual; — 1 ~ 3 月为第一季度,2 表示第二季度。3. 获取月份数 select to_char(sysdate,'MM') from dual; — 五月为 05 4. 获取月份的罗马表示 select to_char(sysdate,'RM') from dual; — 五月为 V 5. 获取用 9 个字符长度表示的月份名 select to_char(sysdate,'Month') from dual; — 五月为 5 月 6. 获取当年第几周 select to_char(sysdate,'WW') from dual; — 2014 年 5 月 20 日为 2014 年第 20 周 7. 获取本月第几周 select to_char(sysdate,'W') from dual; — 2014 年 5 月 20 日为 5 月第 3 周 8. 获取当年第几天 select to_char(sysdate,'DDD') from dual; — 2014 年 5 月 20 日为 2014 年第 140 天 9. 获取当月第几天 select to_char(sysdate,'DD') from dual; — 2014 年 5 月 20 日为 5 月第 20 天 10. 获取一周第几天 select to_char(sysdate,'D') from dual; — 2014 年 5 月 20 日为一周第三天 ( 从周日算起 ) 11. 获取中文的星期 select to_char(sysdate,'DY') from dual; — 2014 年 5 月 20 日为星期二 12. 获取 12 进制小时数 select to_char(sysdate,'HH') from dual; — 22:36 分用 12 小时制计时为 10 点 13. 获取 24 进制小时数 select to_char(sysdate,'HH24′) from dual; — 22:36 分用 24 小时制计时为 22 点 二、经常使用时间函数 1. trunc(d, [ ? ]) 代码语言:javascript AI 代码解释 select sysdateS1,--返回当前日期,有时分秒 trunc(sysdate)S2,--返回当前日期,无时分秒 trunc(sysdate,'year')YEAR,--返回当前年的 1 月 1 日,无时分秒 trunc(sysdate,'month')MONTH,--返回当前月的 1 日,无时分秒 trunc(sysdate,'day')DAY,--返回当前星期的星期天,无时分秒 trunc(sysdate,'Q')QUARTER,--返回当前季度的 1 日,无时分秒 trunc(sysdate,'D')WEEK--返回当前星期的星期天,无时分秒 from dual
FAQ
Oracle 中 SYSDATE 和 SYSTIMESTAMP 有什么区别?
SYSDATE 返回当前日期和时间,精确到秒;SYSTIMESTAMP 返回当前日期和时间及时区信息,精确到微秒。
如何计算两个日期之间的月份差?
使用 MONTHS_BETWEEN 函数,例如 SELECT MONTHS_BETWEEN(date1, date2) FROM dual;。
怎么获取某个月的最后一天?
使用 LAST_DAY 函数,例如 SELECT LAST_DAY(SYSDATE) FROM dual;。