资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,日期和时间的存储与处理,上面的日期的格式是,DD-MON-YY,日期在数据库里面的存储是固定格式的,不会随着你的参数的改变而改变。,这个参数影响主要在两个方面:,1,、输入时如何确认你的输入字符串的日期格式,2,、输出时如何显示你的输出日期格式,使用,sysdate,测试一下当前数据库的日期格式。,使用,DATE,以后,后面的格式必须使用,ANSI,标准格式:,YYYY-MON-DD,使用,TO_CHAR(),和,TO_DATE(),转换函数,TO_CHAR(x,format),TO_DATE(x,format),TO_CHAR(x,format),将时间值转换为字符串(前面已经讲过将数字转换为字符串),MONTH,是大写的月份的全称。,使用,TO_DATE(),将字符串转换为日期格式,按照我们指定的格式来识别字符串为日期格式,然后按照默认的日期格式进行输出。,组合使用,to_char,和,to_date,函数。,设置默认的日期格式,前面我们已经演示了如何修改,NLS_DATE_FORMAT,参数,同时也演示了如何修改,SESSION,的,NLS_DATE_FORMAT,参数。,Oracle,对,YY,格式的解释,如果格式采用的是,YY,,那么,oracle,就采用数据库服务器当前的世纪来填充这个,YY,的世纪。,例如目前数据库服务器的时间是,2009,那么,YY 75,就表示,2075(,有可能本意是,1975),,因此建议还是采用,YYYY,的格式。,使用时间值函数,ADD_MONTHS(),函数,ADD_MONTHS(x,y),函数用于计算,x,加上,y,个月的结果,如果,y,是负数,那么表示减去,y,个月。,LAST_DAY,函数用于计算包含,x,的月的最后一天。,MONTHS_BETWEEN(),NEXT_DAY(x,day),函数,这个函数返回从,x,开始下一个,day,的日期。,ROUND(x,unit),函数,用于对,x,进行取整,默认情况下,x,取整为最近的一天。,YYYY,表示为取整为最近一年的第一天。,如果是以,YYYY,来进行,round,,那么就看月份,如果月份是下半年,那么就取整到下一年。,如果是以,MM,来进行,round,,那么就看日期,如果日期是上半月,那么就取整到这个月。,如果说是以,HH24,来进行取整,那么就看分钟数,取整到最近的小时。,总是取整到最近的时间点。,TRUNC(),函数,ROUND,总是取整到最近的年份、月份、日期、小时等,TRUNC,总是裁断到本年、本月、本日等等,两者都是到开始时间。,理解时区,Oracle 9i,引入了一种新的特性,可以表示不同的时区。,时区是当地时间与英格兰格林威治时间的时差,格林威治时间过去称为,GMT,,现在称为,UTC,。,时区可以使用时差来表示,也可以使用名字来表示。,时差的表示采用,+|-HH:MI.,例如:,-07,:,00,、,+02,:,15,使用时区名表示,例如:,PST,(太平洋标准时间)、,UTC,(东部标准时间),数据库时区和会话时区,访问的数据库所在的时区可能与本地时区不同:分被称为数据库时区和会话时区。,数据库时区,默认情况下数据库时区等于会话时区。,会话时区覆盖数据库时区。,查看会话时区中的当前时间:,连接的是同一个数据库,但是会话时区不同。,查看不同时区相对格林威治的时区差。,获取时区名。,将一个时间值从,PST,转换到,EST,。,EST,比,PST,早,3,个小时。,使用时间戳,Oracle 9i,中引入了时间戳的概念。,时间戳可以存储世纪、,4,位年、月、日、时(,24,小时制)、分、秒,时间戳的特点:,1,、可以存储秒的小数位,2,、可以存储时区,1,、,TIMESTAMP(seconds_precision),时间戳存储世纪、,4,位年、月、日、时(,24,小时制)、分、秒,seconds_precision,为可选参数,从,0-9,,默认值是,6,,表示秒的小数点右边可以存储,6,位数字。如果超出这个精度,该小数将被取整。,2,、,TIMESTAMP(seconds_precision)WITH TIME ZONE,扩展了,TIMESTAMP,,用于存储时区。,3,、,TIMESTAMP(seconds_precision)WITH LOCAL TIME ZONE,扩展了,TIMESTAMP,,将给定的时间值转换为数据库的本地时区。,这个表记录了客户购买记录,其中,made_on,就是一个,TIMESTAMP,的列。,INSERT INTO purchases_with_timestamp,values(1,1,TIMESTAMP 2005-05-13 07:15:31.1234);,TIMESTAMP,关键字和前面的,DATE,类似,后面的时间格式必须符合,ANSI,标准,YYYY-MON-DD HH24:MI:SS.SSSSSSSSS,TIMESTAMP 2005-05-13 07:15:31-07:00,或者,TIMESTAMP 2005-05-13 07:15:31 PST,插入数据时带时区,显示的时候也照样需要带时区。,TIMESTAMP WITH LOCAL TIME ZONE,存储的时间被转换为了数据库的本地时区时间戳。,显示的时候被显示为当前会话的时区设置。,假设数据库的时区是,PST,(,-7,:,00,),向数据库中存储下面的时间戳:,2005-05-13 07:15:30 EST,由于,EST,比,UTC,晚,4,个小时,因此,EST,与,PST,之间差,3,个时区,从时间戳中减去,3,个小时。,2005-05-13 04:15:30,假设当前的会话时区就是,PST,如果当前的会话时区是,EST,,那么这个时间就是,04,1,、当前会话的时间和会话时区,timestamp with time zone,类型,2,、当前会话时区的当前时间,timestamp,3,、数据库的当前时间和市区,timestamp with time zone,类型,extract,从,x,中提取年、月、日、时、分、秒、时区。,TO_TIMESTAMP(x,format),用于将字符串,x,转换为一个,TIMESTAMP,类型。,使用时间间隔,Oracle 9i,引入了一种新的特性,可以用来存储时间间隔(,time interval,),时间间隔的例子包括:,1,、,1,年零,3,个月,2,、,25,个月,3,、,-3,天,5,小时,16,分,4,、,1,天,7,小时,5,、,-56,小时,INTERVAL YEAR TO MONTH,类型,用来存储单位为年和月的时间间隔。,INTERVAL+|-y-m YEAR(years_precision)TO MONTH,INTERVAL 1 YEAR -,时间间隔为,1,年,INTERVAL 11 MONTH-,时间间隔为,11,个月,INTERVAL 14 MONTH-,时间间隔为,14,个月,INTERVAL 1-3 YEAR TO MONTH -,时间间隔为,1,年零,3,个月,INTERVAL 0-5 YEAR TO MONTH -,时间间隔为,0,年,5,个月,INTERVAL 123 YEAR(3)TO MONTH -,时间间隔为,123,年,精度为,3,INTERVAL-1-5 YEAR TO MONTH -,时间间隔为负数,值为,1,年零,5,个月,INTERVAL 1234 YEAR-,时间间隔无效,精度最多包含,3,位数字,INSERT INTO coupons values(1,$1 off Z Files,INTERVAL 1 YEAR);,INTERVAL DAY TO SECONDS,类型,可以存储单位为天和秒的时间间隔,INTERVAL 3 DAY-,时间间隔为,3,天,INTERVAL 2 HOUR-,时间间隔为,2,个小时,INTERVAL 25 MINUTE-,时间间隔为,25,分钟,INTERVAL 45 SECOND-,时间间隔为,45,秒,INTERVAL 3 2 DAY TO HOUR-,时间间隔为,3,天零,2,小时,INTERVAL 3 2:25 DAY TO MONUTE-,时间间隔为,3,天零,2,小时,25,分钟,INTERVAL 3 2:25:45 DAY TO SECOND-,时间间隔为,3,天零,2,小时,25,分,45,秒,INTERVAL 123 2:25:45.12 DAY(3)TO SECOND(2),-,时间间隔为,123,天零,2,小时,25,分,45.12,秒,INTERVAL 3 2:00:45 DAY TO SECOND-,时间间隔为,3,天,2,小时,45,秒,INTERVAL-3 2:25:45 DAY TO SECOND-,时间间隔为负数,INTERVAL 1234 2:25:45 DAY(3)TO SECOND-,无效时间间隔,INTERVAL 123 2:25:45.123 DAY TO SECOND(2),无效时间间隔,INSERT INTO coupons values(1,10%off Z Files,INTERVAL 3 YEAR);,将一个数字转换为,INTERVAL DAY TO SECOND,类型。,
展开阅读全文