<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • Oracle認(rèn)證:過(guò)去、現(xiàn)在及日期的差

    時(shí)間:2024-10-24 08:33:14 Oracle認(rèn)證 我要投稿
    • 相關(guān)推薦

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

      一、日期算法

      1、sysdate、current_date及systimestamp

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

      select sysdate from dual;

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

      current_date 返回的是當(dāng)前會(huì)話的時(shí)區(qū)的系統(tǒng)日期,我們平時(shí)用的都是東八區(qū),如果將當(dāng)前會(huì)話時(shí)間修改成東九區(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

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

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

      select systimestamp from dual

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

      2、兩個(gè)日期的差

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

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

      select sysdate+10 from dual

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

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

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

      結(jié)果:38.1794097222222

      暈,還有一個(gè)多月才能過(guò)年呢啊

      3、添加月份、減少月份

      用的都是add_months

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

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

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

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

      4、greatest和least

      這兩個(gè)函數(shù)在介紹數(shù)值函數(shù)的時(shí)候提到過(guò),在數(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對(duì)字符串進(jìn)行轉(zhuǎn)化,否則會(huì)把他們無(wú)法判斷是否為日期格式,只能當(dāng)成字符串去處理。容易出現(xiàn)結(jié)果錯(cuò)誤的情況。

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

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

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

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

      6、last_day 計(jì)算某個(gè)月的最后一天是哪天?

      select last_day(sysdate) from dual

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

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

      計(jì)算下自己的周歲:

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

      結(jié)果:23

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

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

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

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

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

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

      1、基本使用

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

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

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

      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的時(shí)候可以在format參數(shù)中插入字符串,以雙引號(hào)的方式插入:

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

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

      2、最常見(jiàn)的to_char錯(cuò)誤

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

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

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

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

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

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

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

      4、new_time 切換時(shí)區(qū)

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

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

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

      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)該不會(huì)常用,了解下就行了。

      三、EXTRACT

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

      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抽取年月日部分和抽取時(shí)分部分是不同的,抽取時(shí)分的時(shí)候

      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)換成日期格式還報(bào)錯(cuò),真讓我想不通

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

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

      select to_char(sysdate ,'HH') from dual

      結(jié)果:2013

      10

      四、使用TIMESTAMP類(lèi)型

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

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

    Oracle認(rèn)證作用03-19

    Oracle認(rèn)證簡(jiǎn)介11-30

    Oracle最新認(rèn)證03-09

    Oracle認(rèn)證途徑03-20

    Oracle認(rèn)證:ORACLE綁定變量BINDPEEKING03-08

    Oracle認(rèn)證職業(yè)前景03-19

    Oracle認(rèn)證考試技巧03-19

    oracle認(rèn)證考試詳情01-22

    Oracle認(rèn)證:Oracle控制件文件修復(fù)03-18

    主站蜘蛛池模板: 亚洲福利精品电影在线观看| 国产成人亚洲合集青青草原精品| 久久久久久国产精品无码超碰| 国产日韩久久久精品影院首页| 国产国拍亚洲精品福利| 国产综合成人色产三级高清在线精品发布 | 亚洲欧美日韩国产成人精品影院| 国产精品自在线拍国产电影 | 日韩精品毛片| 老司机67194精品线观看| 国产成人A人亚洲精品无码| 国产精品高清视亚洲精品| 99久久夜色精品国产网站| 青春草无码精品视频在线观| 日韩精品极品视频在线观看免费 | 91精品日韩人妻无码久久不卡| 久久精品18| 国产成人精品久久二区二区| 精品人妻少妇嫩草AV无码专区| 人妻精品久久无码专区精东影业| 久久最新精品国产| 伊人精品视频在线| 51精品资源视频在线播放| 亚洲精品无码av人在线观看| 四虎永久在线精品国产免费| 无码久久精品国产亚洲Av影片| 2020最新久久久视精品爱| 久久亚洲精品国产精品| 国产va免费精品| .精品久久久麻豆国产精品| 亚洲国产91精品无码专区| 99精品久久久久久久婷婷| 曰韩精品无码一区二区三区| 在线观看91精品国产入口| 免费精品无码AV片在线观看 | 亚州日韩精品专区久久久| 99视频在线精品国自产拍亚瑟| 2021久久精品国产99国产精品| 亚洲av永久无码精品漫画| 麻豆国内精品久久久久久| 国产成人精品曰本亚洲79ren|