oracle日期时间类型
Oracle 获取当前日期及日期格式

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数据库有许多基本数据类型,包括:
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时间常⽤函数(字段取年、⽉、⽇、季度)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日期时间范围查询

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 中是通过日期格式模型指定的。
以下是一些常见的日期格式模型和它们的含义: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数据库中,日期和时间被定义为特殊的数据类型。
主要的数据类型有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数据库中,有几种常见的日期和时间格式,可以用来表示年月。
以下是其中一些常用的格式:
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特定的格式存贮的,占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将分钟转换成天。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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来新增加小时,分钟,秒。