oracle日期时间类型

合集下载

Oracle 获取当前日期及日期格式

Oracle 获取当前日期及日期格式
mi是分钟,输出 2009-12-25 14:23:31
select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;
mm会显示月份,输出 2009-12-25 14:12:31
select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;
yy 表示年的最后2位 、
yyy 表示年的最后3位 、
yyyy 用4位数表示年
表示month的: mm 用2位数字表示月 、
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;
dy 当周第几天,简写, 比如星期五或者fri 、
day 当周第几天,全称, 比如星期五或者friday
表示hour的:hh 2位数表示小时 12进制 、
hh24 2位数表示小时 24小时
时间间隔乘以一个数字
select sysdate,sysdate - 8*interval '7' hour from dual;
含义解释:
Dual伪列
Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的select语句块中。

oracle数据库基本数据类型

oracle数据库基本数据类型

oracle数据库基本数据类型
Oracle数据库有许多基本数据类型,包括:
1. 字符型:
- CHAR:固定长度的字符型,最长可达2000个字节。

- VARCHAR2:可变长度的字符型,最长可达4000字节。

- CLOB:用于存储大量文本数据的字符型,最长可达4GB。

- NCHAR:固定长度的Unicode字符型,最长可达2000个字节。

- NVARCHAR2:可变长度的Unicode字符型,最长可达4000字节。

- NCLOB:用于存储大量Unicode文本数据的字符型,最长可达4GB。

2. 数值型:
- NUMBER:用于存储数值数据的类型,包括整数和浮点数。

- BINARY_FLOAT:用于存储单精度浮点数。

- BINARY_DOUBLE:用于存储双精度浮点数。

3. 日期和时间型:
- DATE:用于存储日期和时间信息。

- TIMESTAMP:用于存储日期、时间和时区信息。

4. 二进制型:
- RAW:用于存储二进制数据的类型,最长可达2000字节。

- BLOB:用于存储大量二进制数据的类型,最长可达4GB。

5. BOOLEAN型:用于存储布尔值(TRUE或FALSE)。

这些基本数据类型可以通过组合和修饰符进行扩展和定制。

ORACLE时间常用函数(字段取年、月、日、季度)

ORACLE时间常用函数(字段取年、月、日、季度)

ORACLE时间常⽤函数(字段取年、⽉、⽇、季度)TO_DATE格式Day:dd number 12dy abbreviated friday spelled out fridayddspth spelled out, ordinal twelfthMonth:mm number 03mon abbreviated marmonth spelled out marchYear:yy two digits 98yyyy four digits 199824⼩时格式下时间范围为: 0:00:00 - 23:59:59.... 12⼩时格式下时间范围为: 1:00:00 - 12:59:59 ....Y或YY或YYY 年的最后⼀位,两位或三位Select to_char(sysdate,’YYY’) from dual;002表⽰2002年SYEAR或YEAR SYEAR使公元前的年份前加⼀负号Select to_char(sysdate,’SYEAR’) from dual; -1112表⽰公元前111 2年Q 季度,1~3⽉为第⼀季度 Select to_char(sysdate,’Q’) from dual; 2表⽰第⼆季度①MM ⽉份数 Select to_char(sysdate,’MM’) from dual; 12表⽰12⽉RM ⽉份的罗马表⽰ Select to_char(sysdate,’RM’) from dual; IV表⽰4⽉Month ⽤9个字符长度表⽰的⽉份名 Select to_char(sysdate,’Month’) from dual; May后跟6个空格表⽰5⽉WW 当年第⼏周 Select to_char(sysdate,’WW’) from dual; 24表⽰2002年6⽉13⽇为第24周W 本⽉第⼏周 Select to_char(sysdate,’W’) from dual; 2002年10⽉1⽇为第1周DDD 当年第⼏, 1⽉1⽇为001,2⽉1⽇为032 Select to_char(sysdate,’DDD’) from dual; 363 2002年1 2⽉2 9⽇为第363天DD 当⽉第⼏天 Select to_char(sysdate,’DD’) from dual; 04 10⽉4⽇为第4天D 周内第⼏天 Select to_char(sysdate,’D’) from dual; 5 2002年3⽉14⽇为星期⼀DY 周内第⼏天缩写 Select to_char(sysdate,’DY’) from dual; SUN 2002年3⽉24⽇为星期天HH或HH12 12进制⼩时数 Select to_char(sysdate,’HH’) from dual;02 午夜2点过8分为02 HH24 24⼩时制 Select to_char(sysdate,’HH24’) from dual; 14 下午2点08分为14MI 分钟数(0~59) Select to_char(sysdate,’MI’) from dual; 17下午4点17分SS 秒数(0~59) Select to_char(sysdate,’SS’) from dual; 22 11点3分22秒提⽰注意不要将MM格式⽤于分钟(分钟应该使⽤MI)。

oracle日期时间范围查询

oracle日期时间范围查询
字段为:字符串类型(char),长度为:20
SELECT * FROM testdatetime t WHERE 1=1 AND edate >= '2011-06-01' AND edate <= '2011-07-05';
SELECT * FROM testdatetime t WHERE 1=1 AND to_date(edate,'yyyy-MM-dd HH24:MI:SS') between to_date('2011-07-01 12:00:00','yyyy-MM-dd HH24:MI:SS') and to_date('20110702 12:00:00','yyyymmdd HH24:MI:SS') ;
SELECT * FROM testdatetime t WHERE 1=1 AND to_date(t.createdate,'yyyy-MM-dd') between to_date('2011-06-01','yyyy-MM-dd') and to_date('20110705','yyyymmdd') ;
登录后才能查看或发表评论立即登录或者逛逛博客园首页
oracle日 期 时 间 范 围 查 询
字段为:字符串类型(char),长度为:10
SELECT * FROM testdatetdate >= '2011-06-01' AND t.createdate <= '2011-07-05';
字段为:日期时间类型(date)

oracle中date类型格式

oracle中date类型格式

oracle中date类型格式在Oracle 数据库中,`DATE` 类型用于存储日期和时间信息。

日期格式在Oracle 中是通过日期格式模型指定的。

以下是一些常见的日期格式模型和它们的含义:1. `DD-MM-YYYY`:日-月-年-例如:01-02-2023 表示2023 年2 月1 日。

2. `MM/DD/YYYY`:月/日/年-例如:02/01/2023 表示2023 年2 月1 日。

3. `YYYY-MM-DD`:年-月-日-例如:2023-02-01 表示2023 年2 月1 日。

4. `YYYY-MM-DD HH24:MI:SS`:年-月-日时:分:秒(24小时制)-例如:2023-02-01 14:30:45 表示2023 年2 月1 日下午2 点30 分45 秒。

5. `MON DD, YYYY HH:MI:SS AM`:月日, 年时:分:秒AM/PM-例如:Feb 01, 2023 02:30:45 PM 表示2023 年2 月1 日下午2 点30 分45 秒。

这只是一些常见的日期格式示例,实际上有许多其他的日期格式可以在Oracle 中使用。

在进行数据库查询或插入操作时,你可以使用`TO_DATE` 函数将字符串转换为`DATE` 类型,或使用`TO_CHAR` 函数将`DATE` 类型格式化为字符串。

例如:```sql--将字符串转换为DATESELECT TO_DATE('2023-02-01', 'YYYY-MM-DD') FROM dual;--将DATE 格式化为字符串SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM dual;```在这些例子中,`'YYYY-MM-DD'` 和`'YYYY-MM-DD HH24:MI:SS'` 是日期格式模型。

oracle年月日时分秒的格式

oracle年月日时分秒的格式

Oracle年月日时分秒的格式一、概述在数据库系统中,日期和时间的处理是非常重要的一个方面。

Oracle数据库提供了丰富的日期和时间函数,可以满足不同的需求。

其中,日期和时间的格式化是其中的关键操作之一。

在Oracle中,我们可以使用不同的格式来表示年月日时分秒。

本文将详细介绍Oracle中年月日时分秒的格式化方法。

二、日期和时间的数据类型在Oracle数据库中,日期和时间被定义为特殊的数据类型。

主要的数据类型有DATE、TIMESTAMP和TIMESTAMP WITH TIME ZONE等。

这些数据类型可以存储年月日时分秒的信息。

2.1 DATE数据类型DATE数据类型是Oracle中最常用的日期和时间数据类型。

它可以存储从公元前4712年到公元9999年的日期和时间。

DATE数据类型的格式默认为”YYYY-MM-DD HH24:MI:SS”,其中YYYY表示年份,MM表示月份,DD表示日期,HH24表示小时(24小时制),MI表示分钟,SS表示秒钟。

2.2 TIMESTAMP数据类型TIMESTAMP数据类型是Oracle中用于存储日期和时间信息的另一种数据类型。

它可以存储更精确的时间信息,包括毫秒级别的精度。

TIMESTAMP数据类型的格式也是”YYYY-MM-DD HH24:MI:SS.FF”,其中FF表示毫秒。

2.3 TIMESTAMP WITH TIME ZONE数据类型TIMESTAMP WITH TIME ZONE数据类型是一种带有时区信息的日期和时间数据类型。

它可以存储时区偏移量,以便在不同的时区中正确地显示日期和时间。

TIMESTAMP WITH TIME ZONE数据类型的格式与TIMESTAMP数据类型相同。

三、日期和时间的格式化在Oracle数据库中,可以使用不同的函数来格式化日期和时间。

常用的函数有TO_CHAR、TO_DATE和TO_TIMESTAMP等。

3.1 TO_CHAR函数TO_CHAR函数用于将日期和时间数据类型转换为指定的字符串格式。

oracle年月格式

oracle年月格式

oracle年月格式
在Oracle数据库中,有几种常见的日期和时间格式,可以用来表示年月。

以下是其中一些常用的格式:
1. YYYY-MM: 这是ISO标准的年月格式,其中YYYY表示四位数的年份,MM表示两位数的月份。

例如,2022年1月可以表示为"2022-01"。

2. YYYYMM: 这是一种紧凑的年月格式,其中YYYY表示四位数的年份,MM表示两位数的月份。

例如,2022年1月可以表示为"202201"。

3. MM/YYYY: 这是一种常见的月年格式,其中MM表示两位数的月份,YYYY表示四位数的年份。

例如,1月2022年可以表示为"01/2022"。

4. MON-YYYY: 这是一种缩写的月年格式,其中MON表示月份的缩写,YYYY表示四位数的年份。

例如,1月2022年可以表示为"JAN-2022"。

5. MONTH YYYY: 这是一种完整的月年格式,其中MONTH表示月份的全名,YYYY表示四位数的年份。

例如,1月2022年可以表示为"January 2022"。

需要注意的是,Oracle数据库中的日期和时间格式可以通过使用TO_CHAR函数将日期类型的数据转换为字符串来实现。

例如,可以使用以下语句将日期字段转换为指定的年月格式:
sql.
SELECT TO_CHAR(date_column, 'YYYY-MM') FROM table_name;
以上是一些常见的Oracle年月格式,你可以根据具体需求选择适合的格式进行使用。

Oracle中的日期时间存储

Oracle中的日期时间存储

①Oracle中的日期时间存储:oracle数据库中存放时间格式的数据,是以oracle特定的格式存贮的,占7个字节,与查询时显示的时间格式无关。

不存贮秒以下的时间单位。

②Oracle中的日期时间显示:通常,客户端与数据库建立起连接后,oracle就会给一个缺省的时间格式数据的显示形式,与所使用的字符集有关。

一般显示年月日,而不显示时分秒。

③Oracle中的日期时间插入:向表中插入数据时,如果不使用转换函数,则时间字段的格式必须遵从会话环境的时间格式,否则不能插入。

④Oracle中的日期时间格式修改:a.SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';b.册表\hkey_local_machine\software\oracle\home0主键中增加一个字串(8i版本),字串名为nls_date_format,字串的值为你希望定义的时间格式前者只对当前会话有效,也即是一旦你关闭了SQL*PLUS窗口或重新打开一个SQL*PLUS窗口,日期时间格式依然采用本地字符集对应的日期时间格式。

后者对所有客户端应用有效。

当两者同时应用时,以alter session的修改为准。

一、Oracle的日期函数:Oracle从8i开始就提供了大量的日期函数,这些日期函数包括对日期进行加减、转换、截取等功能。

下面是Oracle提供的日期函数一览表二、日期加减:在Oralce中,对日期进行加减操作的默认单位是天,也就是说如果我们向当前日期加1的话是加上一天,而不是一秒或一小时。

那么对一天中的一段时间进行加减要怎么做呢?很简单!只需将它们转化为以天为单位即可。

【1】为当前时间加上30分钟:SQL>select to_char(sysdate, 'yyyy-mm-dd hh:mi:ss') now_date,2 to_char(sysdate+(30/24/60), 'yyyy-mm-dd hh:mi:ss') new_date3from dual;NOW_DATE NEW_DATE-------------------------------------- --------------------------------------2008-06-3010:47:312008-06-3011:17:31SQL>我们看到了在绿色高亮处使用30/24/60将分钟转换成天。

oracle的todate用法

oracle的todate用法

Oracle的todate用法1. 什么是Oracle的todate函数?在Oracle数据库中,todate是一个非常重要的函数,它用于将日期字符串转换为日期类型。

todate函数接受两个参数:第一个参数是日期字符串,第二个参数是日期格式模式。

2. todate函数的语法todate(date_string, format)•date_string: 一个表示日期的字符串。

•format: 可选参数,指定了日期字符串的格式模式。

3. todate函数支持的格式模式以下是一些常用的日期格式模式:•YYYY-MM-DD: 年-月-日•YYYY/MM/DD: 年/月/日•DD-MM-YYYY: 日-月-年•DD/MM/YYYY: 日/月/年•MM-DD-YYYY: 月-日-年•MM/DD/YYYY: 月/日/年此外,还有其他一些可以使用的格式模式,如:•YY-MM-DD HH24:MI:SS•YY/MM/DD HH24:MI:SS•YY/MM/DD HH12:MI:SS AM4. todate函数示例下面给出一些示例来演示todate函数的使用。

示例1:将字符串转换为日期类型假设我们有一个表格名为employees,其中有一个列名为hire_date。

该列存储了员工入职日期的信息。

现在我们想要将一个日期字符串'2022-01-01'插入到该列中。

INSERT INTO employees (hire_date) VALUES (todate('2022-01-01', 'YYYY-MM-DD'));示例2:将日期字符串转换为特定格式假设我们有一个表格名为orders,其中有一个列名为order_date。

该列存储了订单的下单日期信息。

现在我们想要查询出所有订单的下单日期,并以特定的格式显示。

SELECT to_char(order_date, 'YYYY年MM月DD日') AS formatted_order_dateFROM orders;示例3:将字符串转换为时间戳类型假设我们有一个表格名为logs,其中有一个列名为log_time。

oracle数据库日期,时间使用,删除恢复等

oracle数据库日期,时间使用,删除恢复等

Oracle批量删除表、索引等对象、批量恢复Drop操作删除的表、索引等对象虽然能够恢复表结构和数据,但是索引,主键,约束等,并不能完全恢复。

/**********************************************************************查询Drop操作删除的对象select * from recyclebin ;单个对象(表、索引或是通过drop操作删除的其它对象)恢复flashback table(被删除的对象类型)被删除的对象名称to before drop***********************************************************************/--Demo单张表恢复flashback table Table_XXX to before drop;-- 创建批量恢复表的存储过程create or replace procedure RecoveryOfTable isbegindeclare/*********************************************************************** select 'flashback table '||a.original_name||' to before drop' fromrecyclebin a where a.operation = 'DROP' and a.type='TABLE'恢复其它类型对象请将flashback table 这里换为其它类型,type='相应的类型'可加更多条件限制,具体查询recyclebin***********************************************************************/ cursor cur_flashback is select 'flashback table '||a.original_name||' to before drop' from recyclebin a where a.operation = 'DROP' and a.type='TABLE';v_name varchar2(4000);beginopen cur_flashback;fetch cur_flashback into v_name;while cur_flashback%foundloopexecute immediate v_name;fetch cur_flashback into v_name;end loop;dbms_output.put_line('恢复成功!');close cur_flashback;end;end;--执行存储过程(使用plsql操作时)beginRecoveryOfTable;end;--执行存储过程(使用SQL调用)execute RecoveryOfTable;/**************************************批量删除数据库表select * from user_tables where table_name like 'Table_XXX%';存储过程体**************************************/declarecursor cur_delete is select 'drop table '|| table_name from user_tables where table_name like 'Table_XXX%';/*************************************可模板条件删除其它类型对象如:索引等**************************************/v_name varchar2(4000);beginopen cur_delete;fetch cur_delete into v_name;while cur_delete%found loopexecute immediate v_name;fetch cur_delete into v_name;end loop;dbms_output.put_line('将所有Table_XXX开头的表删除!');close cur_delete;end;执行PURGE TABLE ZYM_USER."BIN$UagqFGZsZcvgQAoKpSB9uQ==$0"--oracle todate函数,to_char 函数--oracle 24小时select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual; --12小时select to_date('2005-01-01 2:14:20','yyyy-MM-dd HH12:mi:ss') from dual;select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;--mi是分钟select to_char(sysdate,'yyyy-MM-dd HH12:mi:ss') from dual;--12小时制--选取一个月前的日期select sysdate,sysdate-interval'1'month from dual;--选取一个年前的日期select sysdate,sysdate-interval'1'year from dual;--选取一天前的日期select sysdate,sysdate-interval'1'day from dual;--选取一小时前的日期select sysdate,sysdate-interval'1'hour from dual;--选取7分钟前的日期select sysdate,sysdate-interval'7'minute from dual;--选取时间间隔乘以一个数字的日期select sysdate,sysdate- 5* interval'1'month from dual;select sysdate,sysdate- 5* interval'1'day from dual;select sysdate,sysdate- 5* interval'1'hour from dual;select sysdate,sysdate- 5* interval'1'minute from dual; select sysdate,sysdate - interval'0'month from dual;--当前日期--oracle 获取guidselect sys_guid() from dual ;以24小时的形式显示出来要用HH24select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;//mi是分钟select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;//mm会显示月份oracle中的to_date参数含义1.日期格式参数含义说明D 一周中的星期几DAY 天的名字,使用空格填充到9个字符DD 月中的第几天DDD 年中的第几天DY 天的简写名IW ISO标准的年中的第几周IYYY ISO标准的四位年份YYYY 四位年份YYY,YY,Y 年份的最后三位,两位,一位HH 小时,按12小时计HH24 小时,按24小时计MI 分SS 秒MM 月Mon 月份的简写Month 月份的全名W 该月的第几个星期WW 年中的第几个星期--日期到字符操作select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual ;--24小时制select sysdate,to_char(sysdate,'yyyy-mm-dd hh:mi:ss') fromdual ;--18:47会变成 06:47select 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;--trunk/ ROUND函数的使用select trunc(sysdate ,'YEAR') from dual ;--2014/1/1select trunc(sysdate ) from dual ;--2014/9/28select to_char(trunc(sysdate ,'YYYY'),'YYYY') from dual ;--2014--oracle有毫秒级的数据类型--返回当前时间年月日小时分秒毫秒select to_char(current_timestamp(5),'DD-MON-YYYY HH24:MI:SSxFF') from dual; --28-9月 -2014 18:50:35.64801--返回当前时间的秒毫秒,可以指定秒后面的精度(最大=9)select to_char(current_timestamp(9),'MI:SSxFF') fromdual;--50:35.751743000--oracle 计算程序运行的时间(ms)declaretype rc is ref cursor;l_rc rc;l_dummy all_objects.object_name%type;l_start number default dbms_utility.get_time;beginfor I in1 .. 1000loopopen l_rc for'select object_name from all_objects '||'where object_id = ' || i;fetch l_rc into l_dummy;close l_rc;end loop;dbms_output.put_line( round( (dbms_utility.get_time-l_start)/100, 2 ) || ' seconds...' );end;--对表进行重命名,不能指定所有者名,即不能指定表所属的数据库名称,如ytmat.t_biao_rookie_waybill_userename t_mat_rookie_waybill_use to t_biao_rookie_waybill_use6;--查询Drop操作删除的对象select * from recyclebin ;select count(*) from recyclebin ;使用drop 删除表drop table 表名称恢复:--注:必须9i或10g以上版本支持,flashback无法恢复全文索引flashback table表名称to before drop;。

ORACLE数据库字段类型说明

ORACLE数据库字段类型说明

ORACLE数据库字段类型说明类型含义存储描述备注CHAR固定长度字符串最⼤长度2000bytesVARCHAR2可变长度的字符串,最⼤长度4000bytes可做索引的最⼤长度749 NCHAR根据字符集⽽定的固定长度字符串最⼤长度2000bytesNVARCHAR2根据字符集⽽定的可变长度字符串最⼤长度4000bytesDATE⽇期(⽇-⽉-年)DD-MM-YY(HH-MI-SS),经过严格测试,⽆千⾍问题TIMESTAMP⽇期(⽇-⽉-年)DD-MM-YY(HH-MI-SS:FF3),经过严格测试,⽆千⾍问题与DATE相⽐较,TIMESTAMP有⼩数位秒信息LONG超长字符串最⼤长度2G,⾜够存储⼤部头著作RAW固定长度的⼆进制数据最⼤长度2000bytes可存放多媒体图象声⾳等LONG RAW可变长度的⼆进制数据最⼤长度2G可存放多媒体图象声⾳等BLOB⼆进制数据最⼤长度4GCLOB字符数据最⼤长度4GNCLOB根据字符集⽽定的字符数据最⼤长度4GBFILE存放在数据库外的⼆进制数据最⼤长度4GROWID数据表中记录的唯⼀⾏号10bytes**.*.*格式,*为0或1NROWID⼆进制数据表中记录的唯⼀⾏号最⼤长度4000bytesNUMBER(P,S)数字类型P为整数位,S为⼩数位DECIMAL(P,S)数字类型P为整数位,S为⼩数位INTEGER整数类型⼩的整数FLOAT浮点数类型NUMBER(38),双精度REAL实数类型NUMBER(63),精度更⾼**⽬前Oracle数据库⼤概有26个字段类型,⼤体分为六类,分别是字符串类型、数字数据类型、⽇期时间数据类型、=⼤型对象(LOB)数据类型、RAW和LONG RAW数据类型、ROWID和UROWID数据类型。

**当然Oracle还提供⽤户⾃定义的数据类型,但在我这篇不做讨论。

字符串类型Charchar数据类型存储固定长度的字符值。

⼀个CHAR数据类型可以包括1到2000个字符。

日期类型问题

日期类型问题

mark2 8月 21,2003 00:00:00
已选择3行。
10、to_char()函数,'DD-MM-YYYY'格式及'MM-DD-YYYY'格式和'month dd,yyyy'格式的不同
'DD-MM-YYYY'格式:21-08-2003
'month dd,yyyy'格式:8月 21,2003
select name,to_char(enrolldate,'month dd,yyyy HH24:MI:SS') from student;
得到的记录结果如下:注意date类型字段中显示了日期,时间
NAME TO_CHAR(ENROLLDATE,'MONTHDD,YYYYHH24:MI:SS')
显示结果见下图(既显示了日期,又显示了时间)
JSP页面中的显示结果
6、在SQL*Plus Worksheet中执行下列SQL语句
select name,to_char(enrolldate,'DD-MM-YYYY HH:MI:SS') from student;
select name,to_char(enrolldate,'DD-MM-YYYY HH24:MI:SS') from student;
得到的记录结果如下:注意date类型字段中显示了日期,时间
NAME TO_CHAR(ENROLLDATE,'DD-MM-YYYYHH24:MI:
13:54:05','MM-DD-YYYY HH24:MI:SS'));
ORACLE中的记录结果为:

orcal时间类型

orcal时间类型

orcal时间类型
Oracle数据库中的时间类型主要有两种:DATE和TIMESTAMP。

1. DATE类型:这是Oracle最常用的日期类型,它可以保存日期和时间。

DATE表示的日期范围是公元前4712年1月1日至公元9999年12月31日。

在数据库中,DATE类型的存储固定为7个字节,格式为:第1字节:世纪+100;第2字节:年;第3字节:月;第4字节:天;第5字节:小时+1;第6字节:分+1;第7字节:秒+1。

2. TIMESTAMP类型:这也是Oracle常用的日期类型,它与DATE的区别在于不仅可以保存日期和时间,还能保存小数秒。

TIMESTAMP类型的小数位数可以指定为0-9,默认为6位,所以最高精度可以到纳秒(ns)。

如果精度为0,则用7字节存储,与DATE类型功能相同;如果精度大于0,则用11字节存储。

oracle 时间查询

oracle 时间查询

to_date()与24小时制表示法及mm分钟的显示:一、在使用Oracle的to_date函数来做日期转换时,很多Java程序员也许会和我一样,直觉的采用“yyyy-MM-dd HH:mm:ss”的格式作为格式进行转换,但是在Oracle中会引起错误:“ORA 01810 格式代码出现两次”。

如:select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual;原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟。

select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;二、另要以24小时的形式显示出来要用HH24select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;//mi是分钟select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;//mm会显示月份to_date() 与 to_char() 日期和字符串转换to_date("要转换的字符串","转换的格式") 两个参数的格式必须匹配,否则会报错。

即按照第二个参数的格式解释第一个参数。

to_char(日期,"转换格式" ) 即把给定的日期按照“转换格式”转换。

转换的格式:表示year的:y 表示年的最后一位 yy 表示年的最后2位 yyy 表示年的最后3位 yyyy 用4位数表示年表示month的:mm 用2位数字表示月;mon 用简写形式比如11月或者nov ;month 用全称比如11月或者november表示day的:dd 表示当月第几天;ddd表示当年第几天;dy 当周第几天简写比如星期五或者fri;day当周第几天全写比如星期五或者friday。

oracle 有关特殊日期类型讲解

oracle 有关特殊日期类型讲解
Name Null? Type
C_ID NUMBER
C_TSTZ TIMESTAMP(6) WITH TIME ZONE
TIMESTAMP WITH TIME ZONE:
存储带时区信息的TIMESTAMP(以和UTC时间差或者地区信息的形式保存)。
形式大致为:
TIMESTAMP '2009-01-12 8:00:00 +8:00'
TIMESTAMP WITH LOCAL TIME ZONE:
另一种不同类型的TIMESTAMP.
遵循一张零时区居中的世界地图,所求时区在已知时区东边则同减西加的结果加上已知时区的时间。否则为减
凡向西走,每过一个时区,就要把表向前拨1小时(比如2点拨到1点);凡向东走,每过一个时区,就要把表向后拨1小时(比如1点拨到2点)。
要计算的区时=已知区时-(已知区时的时区-要计算区时的时区),(注:东时区为正,西时区为负)。
C_ID NUMBER
C_TS TIMESTAMP(6)
INSERT INTO table_ts VALUES(1, '01-JAN-2011 2:00:00');
存的时候:使用数据库的时区存储
取:使用当前会话的时区显示
date
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
timstamp类型 精确秒后后9位 默认6位 和时区没有关系的
ALTER SESSION SET NLS_TIMESTAMP_FORMAT='DD-MON-YY HH:MI:SSXFF';

Oracle 时间和日期函数

Oracle 时间和日期函数

Oracle 时间和日期函数在默认情况下,日期数据的格式是DD-MON-YY。

其中,DD表示两位数字的日,MON 表示3位数的月份,YY表示两位数字的年。

在插入数据时,默认也采用DD-MON-YY格式插入数据。

日期数据的格式由NLS_DATE_FORMA T系统参数来设置,该系统参数存储在INIT.ORA文件和SPFILE.ORA文件中。

可以使用SHOW PARAMETERS命令查看这些系统参数的值,另外还可以通过ALTER SYSTEM或ALTER SESSION命令修改该系统参数。

ALTER SYSTEM命令表示修改系统参数的文件,这种修改设置在以后的数据库操作中将一直起作用;在ALTER SESSION命令的设置只在当前的会话中起作用,该会话结束后,其设置就会失效。

在Oracle 11g中,系统提供了许多用于处理日期和时间的函数,表5-6描述了常用的日期、时间函数的类型和功能。

表5-6 日期和时间函数函数说明add_months(x,y) 在X给定的日期上增加Y个月。

如果Y为负数,则表示从X中减去Y个月last_day(x) 返回包含在X中的月份的最后一天months_between(x,y) 返回X和Y之间的月数next_day(x,day) 返回紧接着X的下一天,参数DAY是一个字符串sysdate() 返回当前系统的日期current_date() 返回本地时区的当前日期new_time(x ,time_zone1 ,time_zon将时间X从时区TIME_ZONE1转变成时区TIME_ZONE2e2)localtimestamp() 返回会话中的日期和时间在Oracle系统中,MONTHS_BETWEEN()函数可以返回两个日期之间的月数,其结果值即可以是正数,也可以是负数。

如果第一个参数指定的日期晚于第二个参数指定的日期,则结果值为负数。

如下所示:SQL> select months_between(date'1981-11-26',sysdate)2 from dual;MONTHS_BETWEEN(DATE'1981-11-26',SYSDA TE)-----------------------------------------316.76572。

ORACLE日期时间格式化参数详解

ORACLE日期时间格式化参数详解

ORACLE⽇期时间格式化参数详解ORACLE⽇期时间格式化参数详解格式化⽇期指的是将⽇期转为字符串,或将字符串转为⽇期,下⾯⼏个函数可以⽤来格式化⽇期TO_CHAR(datetime, 'format')TO_DATE(character, 'format')TO_TIMESTAMP(character, 'format')TO_TIMESTAMP_TZ(character, 'format')SQL 产⽣的结果SELECT TO_CHAR(current_timestamp, 'format') FROM DUAL;1Format List itemYYYY-MM-DD2015-06-15YYYY-MON-DD2015-JUN-15YYYY-MM-DD HH24:MI:SS FF32015-06-15 13:18:10 700YYYY-MM-DD HH24:MI:SS FF3 TZR2015-06-15 13:18:10 700 +08:00DS6/15/2015DL Monday, June 15, 2015TS1:18:10 PMOracle ⽀持哪些格式呢?看看下⾯的表格吧Format DescriptionY年的最后⼀位数字,如:5YY年的最后两位数字,如:15YYY年的最后三位数字,如:015YYYY年,如:2015Y,YYY年⽤逗号分割SYYYY年YEAR年拼写,如:TWENTY FIFTEENSYEAR年拼写,如:TWENTY FIFTEENI ISO年的最后⼀位数字,如:5IY ISO年的最后两位数字,如:15IYY ISO年的最后三位数字,如:015IYYY ISO年,如:2015RR两位数字年,如:15RRRR四位数字年,如:2015MM Month (01-12)MON⽉份简称,如:JUNMONTH⽉份全称,如:JUNERM罗马数字⽉份D Day of week (1-7)DD Day of month (1-31)DDD Day of year (1-366)HH Hour of day (1-12)HH12Hour of day (1-12)HH24Hour of day (0-23)MI Minute (0-59)FF [1…9]毫秒DS⽇期简称,如:6/12/2015DL⽇期全称,如:Friday, June 12, 2015TS时间简称,如:5:18:03 PMCC世纪,如:21SCC世纪,如:21Q Quarter of year (1, 2, 3, 4)W Week of month (1-5)WW Week of year (1-53)IW ISO Week of year (1-52 or 1-53)DY星期简称,如:FriDAY星期全称,如:FridayAM A.M.PM P.M.AD A.D.BC B.C.TZD夏令时TZR时区TZH时区之时差TZM时区之分钟差EE era 全称E era 简称J The number of days since January 1, 4712 BCFM去掉⾸尾空格FX精确匹配X秒和毫秒分隔符TH DDTH --> 4thSP DDSP -->FOURSPTH DDSPTH --> FOURTHTHSP DDTHSP --> FOURTH默认情况下,Oracle 格式化⽇期时,有⼀定的容错性,如下⾯的 SQL 返回正确的结果。

oracle interval day用法

oracle interval day用法

oracle interval day用法对于Oracle数据库,处理时间和日期数据类型是一个基本操作。

日期和时间间隔是在Oracle SQL中非常常见的数据类型,因此应该了解如何在Oracle SQL中使用这些数据类型。

Oracle提供了一些功能来处理时间和日期,例如INTERVAL DAY TO SECOND、INTERVAL YEAR TO MONTH和EXTRACT。

在Oracle SQL中,INTERVAL DAY TO SECOND是一个数据类型,用于表示两个时间之间的差异。

使用INTERVAL DAY TO SECOND类型,还可以存储时间段,例如一个会议的持续时间或一个任务的执行时间。

使用INTERVAL DAY TO SECOND类型,可以将时间差异以天、小时、分钟和秒的形式表示。

以下是使用INTERVAL DAY TO SECOND数据类型的用法:1.创建INTERVAL DAY TO SECOND类型的列在创建表时,可以将INTERVAL DAY TO SECOND数据类型用作列类型,如下所示:CREATE TABLE meetings (meeting_id NUMBER(10),start_time DATE,end_time DATE,duration INTERVAL DAY TO SECOND);2.插入INTERVAL DAY TO SECOND类型的数据可以使用DATE和TO_DSINTERVAL函数来插入INTERVAL DAY TO SECOND类型的数据,如下所示:INSERT INTO meetings (meeting_id, start_time, end_time, duration)VALUES (1,TO_DATE('2022-08-01 09:00:00', 'YYYY-MM-DDHH24:MI:SS'),TO_DATE('2022-08-01 12:00:00', 'YYYY-MM-DDHH24:MI:SS'),TO_DSINTERVAL('0 03:00:00'));3.计算INTERVAL DAY TO SECOND类型的数据可以使用加减运算符来计算INTERVAL DAY TO SECOND类型的数据,如下所示:SELECT end_time - start_time as total_timeFROM meetings;这将返回一个INTERVAL DAY TO SECOND类型的值,表示会议的总持续时间。

oracle timestamp运算

oracle timestamp运算

文章标题:深度解析Oracle中的Timestamp运算在Oracle数据库中,Timestamp类型是一种用来存储日期和时间信息的数据类型。

它可以精确到毫秒级别,非常适合在数据库中处理时间相关的操作。

本文将从多个角度对Oracle中的Timestamp运算进行全面分析,帮助读者更好地理解和应用这一功能。

一、Timestamp类型简介Timestamp是Oracle数据库中的一种日期时间类型,它包含了日期和时间的信息,可以精确到毫秒。

在数据库中,我们可以使用Timestamp类型来存储时间戳、记录时间信息等。

可以使用Timestamp类型来存储订单创建时间、交易发生时间等。

二、Timestamp的基本运算1. Timestamp的加法运算在Oracle数据库中,我们可以对两个Timestamp进行加法运算。

我们可以计算两个时间点之间的时间差,或者在某个时间点上加上一定的时间间隔。

这对于一些需要对时间进行计算的业务场景非常有用。

2. Timestamp的减法运算除了加法运算,我们还可以对Timestamp进行减法运算。

我们可以计算两个时间点之间的时间差,或者计算某个时间点距离当前时间的时间间隔。

这对于一些需要对时间进行比较或计算的业务场景也非常重要。

三、Timestamp运算的高级应用1. Timestamp的比较运算在实际应用中,我们经常需要比较两个时间点的先后顺序。

这时,Timestamp类型的比较运算就非常有用。

通过比较运算,我们可以判断哪个时间点在前,哪个时间点在后,从而进行相应的业务逻辑处理。

2. Timestamp的格式转换有时候,我们需要将Timestamp类型转换成指定的日期时间格式,或者将指定的日期时间格式转换成Timestamp类型。

在Oracle数据库中,有专门的函数可以实现这些格式之间的转换,提供了非常便利的方法。

四、个人观点和理解在实际项目中,我经常使用Oracle中的Timestamp类型进行时间相关的运算和处理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle 数据类型及存储方式(三)日期时间类型——袁光东[转]2009年10月18日星期日 16:57第三部分日期时间类型§3.1 DATEDate类型Oralce用于表示日期和时间的数据类型。

固定占用7个字节。

包括七个属性:世纪世纪中的年份月份月份中的哪一天小时分秒SQL> create table test_date(col_date date);Table createdSQL> insert into test_date values(to_date('2008-06-2710:35:00','yyyy-mm-dd hh24:mi:ss'));1 row insertedSQL> select to_char(col_date,'yyyy-mm-dd hh24:mi:ss'),dump(col_date) from test_date;TO_CHAR(COL_DATE,'YYYY-MM-DDHH DUMP(COL_DATE)--------------------------------------------------------------------------------------------------------------2008-06-27 10:35:00 Typ=12 Len=7: 120,108,6,27,11,36,1Date类型的内部编码为12长度:占用7个字节数据存储的每一位到第七位分别为:世纪,年,月,日,时,分,秒。

世纪:采用”加100”表示法来存储。

即世纪+100来存储。

120 – 100 = 20 年:跟世纪一样采用”加100”表示法来存储。

108 – 100 = 08(采用两位表示) 月:自然存储.6日:自然存储,不做修改,27时:(时,分,秒都采用“加1”法存储)11 -1= 10分:36 -1 = 35秒:1 -1 = 0为什么世纪和年份要用加100法存储呢?是为了支持BC和AD日期。

BC即为公元前。

AD即为公元。

如果世纪– 100为一个负数,那么就是一个BC日期。

插入一个公元前日期SQL> insert into test_date values(to_date('-4712-01-01','syyyy-mm-dd hh24:mi:ss'));1 row insertedSQL> select to_char(col_date,'bc yyyy-mm-dd hh24:mi:ss'),dump(col_date) from test_date;TO_CHAR(COL_DATE,'BCYYYY-MM-DD DUMP(COL_DATE)--------------------------------------------------------------------------------------------------------------公元 2008-06-27 10:35:00 Typ=12 Len=7: 120,108,6,27,11,36,1公元前 4712-01-01 00:00:00 Typ=12 Len=7: 53,88,1,1,1,1,1我们已经了解了日期的存储结构。

当要对日期进行截取时,比如去掉时,分,秒。

只需要把最后的三个字节设为:12 12 1就可以了。

SQL> create table test_date1 (col_char varchar2(12), col_date date);Table createdSQL> insert into test_date1 values('full',to_date('2008-06-2712:01:00','yyyy-mm-dd hh24:mi:ss'));1 row insertedSQL> insert into test_date1(col_char,col_date) select 'minute',trunc(col_date,'mi') from test_date12 union all3 select 'day', trunc(col_date,'dd') from test_date14 union all5 select 'month',trunc(col_date,'mm') from test_date16 union all7 select 'year',trunc(col_date,'y') from test_date18 ;4 rows insertedSQL> select col_char, col_date,dump(col_date) from test_date1;COL_CHAR COL_DATE DUMP(COL_DATE)------------ -------------------------------------------------------------------------------------------full 2008-6-27 1 Typ=12 Len=7: 120,108,6,27,13,2,1minute 2008-6-27 1 Typ=12 Len=7: 120,108,6,27,13,2,1day 2008-6-27 Typ=12 Len=7: 120,108,6,27,1,1,1month 2008-6-1 Typ=12 Len=7: 120,108,6,1,1,1,1year 2008-1-1 Typ=12 Len=7: 120,108,1,1,1,1,1要把一个日期截取,只取到年。

数据库只是把最后5个字节置上1。

这是非常快的。

当我们对一个Date字段进行操作,需要截取到年份进行比较时,我们经常使用to_char函数。

通过会这样写。

Select * from test_date1 where to_char(col_date ,’yyyy’) = ‘2008’ 而不是Select * from test_date1 where trunc(col_date,’y’) =to_date(‘2008-01-01’,’yyyy-mm-dd’)使用trunc会占用更少的资源,性能更优。

使用to_char所有的CPU时间与trunc相差一个数量级,差不多10倍。

因为to_char必须把日期转换成一个串,并利用当前系统所采用的NLS来完成,然后执行一个串与串的比较。

而TRUNC只需要把后5个字节设置为1,然后将两个7位的字节的二进行数进行比较就搞定了。

所要截取一个DATE列叶,应该避免使用to_char.另外,要完全避免对DATE列应用函数。

比如我们要查询2008年的所有数据,并且这一列上也有索引,我们希望能够用上这个索引。

SQL> select count(col_date) from test_date1 where col_date >=to_date('2008-01-01','yyyy-mm-dd') and col_date <to_date('2009-01-01','yyyy-mm-dd');COUNT(COL_DATE)---------------5§3.2 向Date类型增加或减时间怎么向Date类型增加时间,例如:向Date增加1天,或1小时,或1秒,一月等。

常有的办法有几个方法:a.向date增加一个NUMBER值。

因为Date 加减操作是以天为单位。

1秒就是1/24/60/60。

依此类推。

b.使用INTERVAL类型。

后续会介绍c.使用内置函数add_months增加月。

增加月不像增加天那么简单,所以需要使用内置函数来处理。

3.2.1 增加秒SQL> create table test_date2(id varchar2(10), operate_time date);Table createdSQL> insert into test_date2 values('1',sysdate);1 row insertedSQL> select id, to_char(operate_time, 'yyyy-mm-dd hh24:mi:ss') from test_date2 where id=1;ID TO_CHAR(OPERATE_TIME,'YYYY-MM----------- ------------------------------1 2008-06-27 13:35:35SQL> update test_date2 set operate_time = operate_time + 1/24/60/60 where id=1;1 row updatedSQL> select id, to_char(operate_time, 'yyyy-mm-dd hh24:mi:ss') from test_date2 where id=1;ID TO_CHAR(OPERATE_TIME,'YYYY-MM----------- ------------------------------1 2008-06-27 13:35:363.2.2 增加分SQL> update test_date2 set operate_time = operate_time + 1/24/60 where id=1;1 row updatedSQL> select id, to_char(operate_time, 'yyyy-mm-dd hh24:mi:ss') from test_date2 where id=1;ID TO_CHAR(OPERATE_TIME,'YYYY-MM----------- ------------------------------1 2008-06-27 13:36:363.2.3 增加小时SQL> update test_date2 set operate_time = operate_time + 1/24 where id=1;1 row updatedSQL> select id, to_char(operate_time, 'yyyy-mm-dd hh24:mi:ss') from test_date2 where id=1;ID TO_CHAR(OPERATE_TIME,'YYYY-MM----------- ------------------------------1 2008-06-27 14:36:363.2.4 增加天SQL> update test_date2 set operate_time = operate_time + 1 where id=1;1 row updatedSQL> select id, to_char(operate_time, 'yyyy-mm-dd hh24:mi:ss') from test_date2 where id=1;ID TO_CHAR(OPERATE_TIME,'YYYY-MM----------- ------------------------------1 2008-06-28 14:36:363.2.4 增加周SQL> update test_date2 set operate_time = operate_time + 1 * 7 where id=1;1 row updatedSQL> select id, to_char(operate_time, 'yyyy-mm-dd hh24:mi:ss') from test_date2 where id=1;ID TO_CHAR(OPERATE_TIME,'YYYY-MM----------- ------------------------------1 2008-07-05 14:36:363.2.5 增加月SQL> update test_date2 set operate_time = add_months(operate_time,1) where id=1;1 row updatedSQL> select id, to_char(operate_time, 'yyyy-mm-dd hh24:mi:ss') from test_date2 where id=1;ID TO_CHAR(OPERATE_TIME,'YYYY-MM----------- ------------------------------1 2008-08-05 14:36:363.2.6 增加年SQL> update test_date2 set operate_time = add_months(operate_time,1 * 12) where id=1;1 row updatedSQL> select id, to_char(operate_time, 'yyyy-mm-dd hh24:mi:ss') from test_date2 where id=1;ID TO_CHAR(OPERATE_TIME,'YYYY-MM----------- ------------------------------1 2009-08-05 14:36:36另外可以使用一个非常有用的函数NUMTODSINTERVAL来新增加小时,分钟,秒。

相关文档
最新文档