亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

Oracle認證

Oracle認證:過去、現(xiàn)在及日期的差

時間:2024-07-11 17:06:09 Oracle認證 我要投稿
  • 相關(guān)推薦

Oracle認證:過去、現(xiàn)在及日期的差

  一、日期算法

  1、sysdate、current_date及systimestamp

  Oracle使用計算機操作系統(tǒng)的當(dāng)前日期和時間,是通過sysdate函數(shù)實現(xiàn)的,在任何可以使用Oracle函數(shù)的其它地方都可以使用sysdate函數(shù),可以將它視為每個表的一個隱藏列或者偽列。

  select sysdate from dual;

  結(jié)果:2013/12/22 19:14:21

  current_date 返回的是當(dāng)前會話的時區(qū)的系統(tǒng)日期,我們平時用的都是東八區(qū),如果將當(dāng)前會話時間修改成東九區(qū)試試:

  alter session set time_zone='+09:00';

  select current_date,sysdate from dual

  結(jié)果:2013/12/24 20:27:332013/12/24 19:27:32

  通過例子我們也看到它倆的區(qū)別了。

  還有一個函數(shù)systimestapm,它返回的是本機的系統(tǒng)時間(包含微秒和時區(qū)),它跟會話的時區(qū)無關(guān)

  select systimestamp from dual

  結(jié)果:24-12月-13 07.34.37.042000 下午 +08:00

  2、兩個日期的差

  兩個日期可以直接進行加減,返回的數(shù)值單位是天,也可以用一個日期加減某個數(shù)值代表N天后(前)

  比如十天后發(fā)工資,那么十天后是那一天呢?

  select sysdate+10 from dual

  結(jié)果:2014/1/1 19:38:19

  再比如今天除夕是2014-01-30,那么距離過年還有哪個多少天呢

  select to_date('2014-01-30','yyyy-MM-dd') -sysdate from dual

  結(jié)果:38.1794097222222

  暈,還有一個多月才能過年呢啊

  3、添加月份、減少月份

  用的都是add_months

  查詢一下三個月后、三個月前分別是哪一天:

  select add_months(sysdate,3),add_months(sysdate,-3) from dual

  結(jié)果:2014/3/22 19:47:182013/9/22 19:47:18

  添加年份、減少年份就不用說了,直接在數(shù)值上乘以12就可以推算N年前、N年后是哪一天

  4、greatest和least

  這兩個函數(shù)在介紹數(shù)值函數(shù)的時候提到過,在數(shù)值函數(shù)中分別代表取一組數(shù)值中的最大值和最小值。

  這哥倆在日期函數(shù)中也有應(yīng)用,greatest是從一組日期數(shù)據(jù)中取距離當(dāng)前最近的日期,least是在一組日期中選擇最早的日期。

  select greatest(to_date('2013-11-11','yyyy-MM- dd'),to_date('2013-12-11','yyyy-MM-dd'),to_date('2014-01-05','yyyy-MM- dd'),to_date('2013-11-11','yyyy-MM-dd')) from dual

  結(jié)果:12013/1/5

  select least(to_date('2013-11-11','yyyy-MM- dd'),to_date('2013-12-11','yyyy-MM-dd'),to_date('2014-01-05','yyyy-MM- dd'),to_date('2013-11-11','yyyy-MM-dd')) from dual

  結(jié)果:12013/11/11

  注意:這里必須用to_date對字符串進行轉(zhuǎn)化,否則會把他們無法判斷是否為日期格式,只能當(dāng)成字符串去處理。容易出現(xiàn)結(jié)果錯誤的情況。

  5、next_day 代表從指定日期開始算,下周幾是哪一天

  select next_day(to_date('2013-12-23','yyyy-MM-dd'),2) from dual

  結(jié)果:2013/12/30

  需要注意的是:這里的2代表的是周一,而不是周二。 1234567 分別代表 周日、周一……周六。

  6、last_day 計算某個月的最后一天是哪天?

  select last_day(sysdate) from dual

  結(jié)果:2013/12/31 20:46:07

  7、months_between 計算兩個日期之間相差的月份數(shù),返回結(jié)果可能帶小數(shù)

  計算下自己的周歲:

  select floor(months_between(sysdate ,to_date('1990-08-24','yyyy-MM-dd'))/12) from dual

  結(jié)果:23

  8、組合日期函數(shù) : 多個日期函數(shù)組合使用

  舉例:2013年10月28日入職新公司,倆月試用期,新員工過了試用期后的每月第一天可以做轉(zhuǎn)正報告。 那10月28日入職的什么時候做轉(zhuǎn)正報告:

  select last_day(add_months(to_date('2013-10-28','yyyy-MM-dd'),2))+1 from dual

  結(jié)果:2014/1/1

  思路:先用add_months計算倆月后是哪一天,再用last_day計算那個月的最后一天,再+1代表下個月的第一天。

  二、使用to_date 和 to_char設(shè)置日期時間格式

  1、基本使用

  to_date 和 to_char兩個函數(shù)的作用是相反的,但是用法很類似

  to_date是將字符串轉(zhuǎn)換為時間格式 to_char是將日期轉(zhuǎn)換為字符串格式

  這兩個函數(shù)我們平時用的實在是太多了,先寫倆例子吧,然后再說其他的:

  select to_date('2013-11-11 12:01:14','yyyy-MM-dd HH:MI:SS') FROM DUAL

  結(jié)果:2013/11/11 12:01:14

  select to_char(sysdate , 'yyyy-MM-dd HH:MI:SS') from dual;

  結(jié)果:2013-12-22 09:37:48

  to_char的時候可以在format參數(shù)中插入字符串,以雙引號的方式插入:

  select to_char(sysdate , 'yyyy"年"MM"月"dd"日"') from dual;

  結(jié)果:2013年12月22日

  2、最常見的to_char錯誤

  就是MM代表的是月份 MI代表隊 是分鐘 不要弄混了,由于Oracle中支持的時間很靈活,所以這塊弄混了他不會提示你的。

  select to_char(sysdate ,'yyyy-MI-dd hh:mm:ss') from dual

  結(jié)果:2013-45-22 09:12:15

  出現(xiàn)這樣的錯誤就很悲催了,好在分鐘是45還能容易發(fā)現(xiàn), 要是1-12之內(nèi)的,要從結(jié)果發(fā)現(xiàn)錯誤也不容易。

  3、to_date 不僅可以接受字符串的參數(shù),還可以接受數(shù)值類型的參數(shù):

  select to_date(20131222,'yyyy-MM-dd') from dual

  結(jié)果:2013/12/22

  4、new_time 切換時區(qū)

  new_time(date,'this','other')

  三個參數(shù):date代表的是this時區(qū)的時間,'this'代表的是是用三個字母組成的縮寫代替,代表當(dāng)前時區(qū),'other'也是用三個字母組成的縮寫代替,表示其他時區(qū)。

  舉例:查一下'2014-10-01 12:00:00'這個時間在北京和夏威夷的時間分別是多少

  select to_date('2014-10-01 12:00:00','yyyy-MM-dd hh24:mi:ss'),new_time(to_date('2014-10-01 12:00:00','yyyy-MM-dd hh24:mi:ss'),'EST','HST') FROM DUAL

  結(jié)果:2014/10/1 12:00:002014/10/1 7:00:00

  應(yīng)該不會常用,了解下就行了。

  三、EXTRACT

  EXTRACT可用來代替to_char函數(shù)來選擇日期值中的某一部分(如從一個日期中選擇月份和天)

  SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;

  SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL;

  SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL;

  結(jié)果:

  2013

  12

  22

  注意:EXTRACT抽取年月日部分和抽取時分部分是不同的,抽取時分的時候

  SELECT EXTRACT(hour FROM TIMESTAMP '2013-12-22 22:34:12') FROM DUAL;

  SELECT EXTRACT(minute FROM TIMESTAMP '2013-12-22 22:34:12') FROM DUAL;

  結(jié)果:

  22

  34

  而且如果將'2013-12-22 22:34:12'用to_date轉(zhuǎn)換成日期格式還報錯,真讓我想不通

  再說了這個函數(shù)的存在有毛用呢?至今沒想明白,用to_char完全可以實現(xiàn)它的功能啊

  select to_char(sysdate ,'yyyy') from dual;

  select to_char(sysdate ,'HH') from dual

  結(jié)果:2013

  10

  四、使用TIMESTAMP類型

  DATE 在數(shù)據(jù)類型存儲精確到秒的日期和時間,二TIMESTAMP數(shù)據(jù)類型存儲精確到十億分之一秒的日期。

【Oracle認證:過去、現(xiàn)在及日期的差】相關(guān)文章:

Oracle認證途徑09-17

Oracle認證簡介08-05

Oracle認證考試09-04

Oracle認證基本介紹10-12

oracle認證有哪些07-12

Oracle認證考試信息07-02

Oracle認證考試介紹05-03

oracle認證考試詳情06-09

Oracle認證人員09-14

Oracle認證考試應(yīng)用08-30