久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

oracle時間函數(shù)

 真愛圖書 2013-09-23

一,、Oracle的日期函數(shù):

Oracle從8i開始就提供了大量的日期函數(shù),,這些日期函數(shù)包括對日期進(jìn)行加減、轉(zhuǎn)換,、截取等功能,。下面是Oracle提供的日期函數(shù)一覽表  Function
 Use
 
ADD_MONTHS
 Adds months to a date
 
LAST_DAY
 Computes the last day of the month
 
MONTHS_BETWEEN
 Determines the number of months between two dates
 
NEW_TIME
 Translates a time to a new time zone
 
NEXT_DAY
 Returns the date of the next specified weekday
 
ROUND
 Rounds a date/time value to a specified element
 
SYSDATE
 Returns the current date and time
 
TO_CHAR
 Converts dates to strings
 
TO_DATE
 Converts strings and numbers to dates
 
TRUNC
 Truncates a date/time value to a specific element
 

二,、日期加減:

在Oralce中,對日期進(jìn)行加減操作的默認(rèn)單位是天,,也就是說如果我們向當(dāng)前日期加1的話是加上一天,,而不是一秒或一小時。那么對一天中的一段時間進(jìn)行加減要怎么做呢,?很簡單,!只需將它們轉(zhuǎn)化為以天為單位即可,。

【1】為當(dāng)前時間加上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_date
  3    from dual;

NOW_DATE                               NEW_DATE
-------------------------------------- --------------------------------------
2008-06-30 10:47:31                    2008-06-30 11:17:31

SQL>
我們看到了在綠色高亮處使用30/24/60將分鐘轉(zhuǎn)換成天,。另外一個要注意的地方是:SQL*PLUS環(huán)境下默認(rèn)的日期格式:NLS_DATE_FORMAT是DD-MM-YYYY,也即是不包含時,、分,、秒,所以我們這里必須采用to_char的方式指定輸入的日期格式,。

除此之外也可以通過在SQL*PLUS中執(zhí)行下列語句修改默認(rèn)的日期輸出格式,,這樣的話就不需要通過to_char來轉(zhuǎn)換了,直接輸出就行,。 alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
【2】為當(dāng)前時間減去30分鐘: SQL> select to_char(sysdate+(-30/24/60),'yyyy-mm-dd hh:mi:ss') new_date from dual;

NEW_DATE
--------------------------------------
2008-06-30 10:24:59
只需要加上一個負(fù)數(shù)即可以了,。

三、月份加減:

月份的加減和日期加減相比要難了很多,,因為每個月份的天數(shù)并不是固定的,,可能是31,30,29,28。如果采用上面的方法將月份轉(zhuǎn)換成實際天數(shù)將不可避免地出現(xiàn)多個判斷,,幸虧Oracle為我們提供了一個add_months函數(shù),,這個函數(shù)會自動判斷月份的天數(shù)??纯聪旅娴睦樱?/P>

【1】為當(dāng)前時間加上6個月: SQL> select add_months(sysdate, 6) from dual;

ADD_MONTHS
----------
31-12月-08
【2】為當(dāng)前時間減去6個月: SQL> select add_months(sysdate, -6) from dual;

ADD_MONTHS
----------
31-12月-07
【3】求兩個日期相差的月數(shù):

通常情況下兩個時間相減將得到以天數(shù)為單位的結(jié)果,,可是有時我們更希望得到以月為單位的結(jié)果,如果手動轉(zhuǎn)換這太麻煩了,,所以O(shè)racle又提供了一個函數(shù),,這個函數(shù)就是months_between。 SQL> select months_between(sysdate,
  2         to_date('2008-01-01 01:00:00', 'yyyy-mm-dd hh:mi:ss')) result
  3    from dual;

    RESULT
----------
5.94928203
months_between函數(shù)有2個參數(shù),,第一個參數(shù)是結(jié)束日期,,第二個參數(shù)是開始日期,Oracle用第一個參數(shù)減去第二個參數(shù)得到月份數(shù),。所以結(jié)果有可能會是負(fù)數(shù)的,。

四、年份加減:

Oracle并不直接提供對年份進(jìn)行加減的函數(shù),,不過有了add_months和months_between函數(shù),,我們照樣可以做到,。

【1】為當(dāng)前日期加上2年: SQL> select add_months(sysdate, 2*12) two_years_later
  2      from dual;

TWO_YEARS_
----------
30-6月 -10
【2】求兩個日期相差幾年: SQL> select months_between(sysdate,
  2         to_date('2006-06-30', 'yyyy-mm-dd')) / 12 years_between
  3    from dual;

YEARS_BETWEEN
-------------
            2
直接將兩個日期相減,然后除以365天并不準(zhǔn)確,,但是不管一年有多少天它總是只有12個月,,所以利用這一點我們可以先求出兩個日期相差的月數(shù),再除以12就得出相差的年數(shù)了

五,、求每月的最后一天:

SQL> select last_day(sysdate) last_day
  2    from dual;

LAST_DAY
----------
31-8月 -08
六,、求每月的第一天:

Oracle提供了last_day讓我們能夠求出所在月份的最后一天,但沒有對應(yīng)的first_day函數(shù),,如果有這方面的需求,,只需要稍微動一下腦筋,利用last_day函數(shù)即可,。例如下面的SQL語句就是求出下個月的第一天: SQL> select last_day(sysdate)+1 fisrt_day
        from dual;
求當(dāng)前月的第一天:
select last_day(add_months(sysdate,-1))+1 from dual
在這里我們將“每月的第一天”轉(zhuǎn)換成“上個月最后一天的下一天”,,問題就解決了!

七,、求下一個星期幾:

有時候我們會碰上“下個星期五是幾號?。俊边@樣常見的問題,。Oracle為此提供了一個函數(shù):next_day,,它的語法是這樣的:next_day(date, string)。其中第一個參數(shù)date告訴Oracle從什么時候開始算起,,第二個參數(shù)string則告訴Oracle要取的工作日,。

下面我們看看如何得到下個星期五的日期:
SQL> select next_day(sysdate, 'Friday') "Next Friday" from dual;
select next_day(sysdate, 'Friday') "Next Friday" from dual
                         *
ERROR at line 1:
ORA-01846: 周中的日無效
很奇怪!是不,?明明語法沒有問題,,但為什么會說“周中的日無效”呢?這里就不得不說到Oracle中的語言和時區(qū)的問題了,。下面這張圖是使用TOAD截取出來的客戶端session的語言和時區(qū)信息:


圖一

從圖中我們知道了客戶端的語言是簡體中文,,日期使用的語言也是簡體中文,這就是為什么上面的SQL語句出錯的原因了,,因為在中文中只有“星期一,,星期二”這樣的工作日表示,而沒有“Monday,,F(xiàn)irday”這樣的寫法,!

SQL> select next_day(sysdate,'星期五') "下周五" from dual;

下周五
----------
04-7月 -08
如果你不確定自己的時區(qū)或者你擔(dān)心從一個時區(qū)移植到另一個時區(qū)時,SQL語句會出錯,,Oracle還允許你用數(shù)字的形式來表示工作日,。但是要記得一點:1表示的是周日,2表示的是周一,,3表示的是周二,,依此類推,。

例如我要查下個周三是什么時候,則函數(shù)是這樣寫的:next_day(sysdate, 4),。 SQL> select next_day(sysdate,4) from dual;

NEXT_DAY(S
----------
02-7月 -08

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多