【函式】Oracle函式系列(2)--數學函式及日期函式

bitifi發表於2017-02-22

函式】Oracle函式系列(2)--數學函式及日期函式

 

1  BLOG文件結構圖

wps49E9.tmp 

2  前言部分

2.1  導讀和注意事項

各位技術愛好者,看完本文後,你可以掌握如下的技能,也可以學到一些其它你所不知道的知識,~O(∩_∩)O~

數學函式

trunc和round函式

常用日期函式

Tips

本文在itpub(http://blog.itpub.net/26736162)、部落格園(http://www.cnblogs.com/lhrbest)和微信公眾號(xiaomaimiaolhr)有同步更新

文章中用到的所有程式碼相關軟體相關資料及本文的pdf版本都請前往小麥苗的雲盤下載小麥苗的雲盤地址見:http://blog.itpub.net/26736162/viewspace-1624453/

若網頁文章程式碼格式有錯亂,下載pdf格式的文件來閱讀

本篇BLOG中,程式碼輸出部分一般放在一行一列的表格中。其中,需要特別關注的地方我都用灰色背景和粉紅色字型來表示,比如下邊的例子中,thread 1的最大歸檔日誌號為33,thread 2的最大歸檔日誌號為43是需要特別關注的地方;而命令一般使用黃色背景和紅色字型標註;對程式碼或程式碼輸出部分的註釋一般採用藍色字型表示。

  List of Archived Logs in backup set 11

  Thrd Seq     Low SCN    Low Time            Next SCN   Next Time

  ---- ------- ---------- ------------------- ---------- ---------

  1    32      1621589    2015-05-29 11:09:52 1625242    2015-05-29 11:15:48

  1    33      1625242    2015-05-29 11:15:48 1625293    2015-05-29 11:15:58

  2    42      1613951    2015-05-29 10:41:18 1625245    2015-05-29 11:15:49

  2    43      1625245    2015-05-29 11:15:49 1625253    2015-05-29 11:15:53

[ZHLHRDB1:root]:/>lsvg -o

T_XLHRD_APP1_vg

rootvg

[ZHLHRDB1:root]:/>

00:27:22 SQL> alter tablespace idxtbs read write;

====2097152*512/1024/1024/1024=1G

本文如有錯誤或不完善的地方請大家多多指正,ITPUB留言或QQ皆可,您的批評指正是我寫作的最大動力。

 

2.2  本文簡介

最近一段時間比較忙,就給大家分享一些簡單的函式吧本部分分享完後就給大家分享有關鎖的內容,請大家持續關注小麥苗,謝謝。

之前釋出了Oracle函式系列(1)--字元函式(http://blog.itpub.net/26736162/viewspace-2126927/),今天給大家分享的是Oracle函式系列(2)--數學函式及日期函式。

3  數學函式

數學數的輸入引數和回值的資料型別都是數字型別的。數學數包 cos, cosh,exp,ln, log,sin,sinh,sqrt,tan,tanh,acos,asin,atan,round如下所示:

l round(n,[m]) 

數用於執行舍五,如果省掉 m,則四舍五入到整數, 如果 m 是正數,則四舍五入到小數點的 m 位後。如果 m 是數,則四舍五入到小數點的 m 位前。

l trunc(n,[m])  ---可以對數值和date型別的資料擷取,具體見下面的解析。  

l floor(n)  回小於或是等於 n 的最大整數

l ceil(n)  回大於或是等於 n 的最小整數

l mod(m,n):取餘(ANSI標準中規定取模運算的符號為%在一些直譯器中被函式MOD所取代)

l sign(m): 根據引數m的值是0,正數還是負數依次返回0,1,-1

l abs(n):  回數字 n 的對值

l acos(n):  回數字的反餘弦

l asin(n):  回數字的

l atan(n):  回數字的

l cosh(): 雙曲餘弦

l sinh(): 雙曲正弦

l tanh(); 雙曲正切

l sin(n); 正弦

l cos(n):餘弦

l exp(n):  回 e 的 n 次

l power(m,n):回 m 的 n 次

l log(m,n):  回對數值

l ln(m): 返回m(m>0)的自然對數(以常數e為底數的對數叫做自然對數,記作ln N(N>0).

l sqrt(m): 返回引數的平方根 由於負數是不能開平方的 ,所以m不能為負數

 

注意:三角函式預設的引數認定為弧度制

對數字的理,在務系統或行系統中用的最多,不同的理方法,對表有不同的結果。

3.1   trunc(n,[m])

3.1.1  對日期型資料截去取整

TRUNC:表示對日期進行擷取

    下面是該函式的使用情況:

 SELECT trunc(SYSDATE),

       TRUNC(SYSDATE - 1),

       SYSDATE - 1,

       trunc(SYSDATE, 'dd'), --返回當前年月日

       trunc(SYSDATE, 'd'), --返回當前星期的第一天。 

       trunc(SYSDATE, 'mm'), --返回當月第一天。

       trunc(SYSDATE, 'yyyy'), --返回當年第一天。

       trunc(sysdate,'mi'),  --擷取到分鐘,即秒是以00來顯示的,可以和 (SYSDATE - 1)的時間做比較

       TRUNC(TO_DATE('24-12月-1999 08:00 ','dd-mon-yyyy hh:mi AM')),

       TRUNC(TO_DATE('24-12月-1999 08:37 ','dd-mon-yyyy hh:mi AM'),'hh')

FROM   dual;

 

轉換為列模式後的結果:

wps49EA.tmp 

wps49EB.tmp 

 

3.1.2  對數值截去取整返回型別為數值

SELECT TRUNC(456.873),TRUNC(456.873,2),trunc(456.873,-2),trunc(456.873,-3) FROM dual ;

wps49EC.tmp 

 

TRUNC(for number

    TRUNC函式返回處理後的數值,其工作機制與ROUND函式極為類似,只是該函式不對指定小數前或後的部分做相應舍入選擇處理,而統統截去。

    下面是該函式的使用情況:

    TRUNC(89.985,2)=89.98

    TRUNC(89.985)=89

    TRUNC(89.985,-1)=80

    注意:第二個引數可以為負數,表示為小數點左邊指定位數後面的部分截去,即均以0記。與取整類似,比如引數為1即取整到十分位,如果是-1,則是取整到十位,以此類推。

 

3.2  Round

3.2.1  日期

ROUND:對日期進行四捨五入

如果按月進行四捨五入,15日算上半月,會捨去;16日算下半月,會進位

如果按日進行四捨五入,星期三算上半周,星期四算下半周,週日不變

select round(to_date('15/2/2011','DD/MM/YYYY'),'month') from dual

Select ROUND(Sysdate,'YEAR') From DUAL

 

例如:Assume SYSDATE = '25-JUL-95':

ROUND(SYSDATE,'MONTH')    則     01-AUG-95

ROUND(SYSDATE ,'YEAR')     則    01-JAN-96

3.2.2  數值

 

SELECT round(156.00,-2),round(156.00,-1),round(156.00,-3),trunc(round(156.00,-1),-1) FROM dual ;

wps49ED.tmp

 

4  日期函式 

1. 日期數用於理 date 型別的資料。

2. 在日期上加上或減去一個數字結果仍為日期。

3. 兩個日期相減返回日期之間相差的天數。

4. 可以用數字除24來向日期中加上或減去小時。

5. 預設情況下日期格式是 DD-MON-RR  即 12-7 月-78,這個可以用如下語句來查詢:

select sys_context('userenv','nls_date_format') from dual;

 

既然資料庫以數字方式儲存日期,你就可以用算術運算子進行計算,例如,加或減。你可以加或減數字常數以及日期。從日期加或者減一個數,結果是一個日期值,兩個日期相減,得到兩個日期之間的天數,用小時數除以24,可以加小時到日期上。

 

運算             結果      說明

date + number  日期  加一個天數到一個日期上

date - number  日期  從一個日期上減一個天數

date - date  天數  用一個日期減另一個日期

date + number/24  日期  加一個小時數到一個日期上

 

(1)sysdate:  回系統時間

(2)add_months(d,n) 該函式將給定的日期增加n 個月

(3)last_day(d)回指定日期所在月份的最後一天

 

注意:

sysdate:年月日時分秒

日期+-1,都代表一天的時間,比如:

Select TRUNC(Sysdate-365) From DUAL

Select Sysdate-1/24/60 From DUAL

 

求月份:

 SELECT to_char(SYSDATE, 'mm') FROM dual;

wps49FE.tmp 

 

--上一個月

SELECT to_char(add_months(trunc(SYSDATE), -1), 'yyyy-mm') FROM dual;

wps49FF.tmp 

 

--下一個月

SELECT to_char(add_months(trunc(SYSDATE), 1), 'yyyy-mm') FROM dual;

wps4A00.tmp 

 

--去年

SELECT SYSDATE,

       add_months(SYSDATE, -12)

FROM   dual;

wps4A01.tmp 

 

技巧:

如果某一個需求需要求在某一個月中的情況(比如:2012-1-1到2012-1-31),此時可以換種思維,就是用年份和月份來表示,將他們擷取出來,如 createdate這個列就可以表示成:to_char(createdate,'yyyy-mm')=to_char(sysdate,'yyyy-mm')

4.1   MONTHS_BETWEEN

MONTHS_BETWEEN:表示兩個日期的月份之差,即在給定的兩個日期之間有多少個月

select months_between(sysdate,'16-9月-2001') from dual;

Select EMPNO,HIREDATE,MONTHS_BETWEEN(Sysdate,HIREDATE)/12 From EMP;

SELECT SYSDATE,

       MONTHS_BETWEEN(SYSDATE, TO_DATE('2016-12-20', 'YYYY-MM-DD')),

       MONTHS_BETWEEN(SYSDATE, TO_DATE('2016-10-20', 'YYYY-MM-DD'))

  FROM DUAL;

wps4A02.tmp 

4.2   ADD_MONTHS(d,n)

ADD_MONTHS(d,n):當n為正數時,該函式將給定的日期增加n 個月,為負數時減去n個月,該函式很常用,可以用來表示上個月、下個月,去年和下一年等等。

select add_months(sysdate,4) from dual

Select HIREDATE,ADD_MONTHS(HIREDATE,3) From EMP

SELECT SYSDATE, ADD_MONTHS(SYSDATE, 1), ADD_MONTHS(SYSDATE, -1) FROM DUAL;

wps4A03.tmp 

 

ADD_MONTHS(x, y)用於計算x加上y個月的結果。如果y是負數,就從x中減去y個月。下面這個例子在2007年1月1日上加上13個月:

SELECT ADD_MONTHS('01-JAN-2007', 13)FROM dual;ADD_MONTH---------01-FEB-08

下面這個例子從2008年1月1日中減去13個月;注意本例實際上是使用ADD_MONTHS 函式在這個日期上加上-13個月:

SELECT ADD_MONTHS('01-JAN-2008', -13)FROM dual;ADD_MONTH---------01-DEC-06

ADD_MONTHS函式可以用於時間和日期。例如,下面這個查詢在時間值2007年1月1日下午7點15分26秒上增加兩個月:

SELECT ADD_MONTHS(TO_DATE('01-JAN-2007 19:15:26','DD-MON-YYYY HH24:MI:SS'), 2)FROM dual;ADD_MONTH---------01-MAR-07

下面這個查詢重寫了上面這個例子:它使用TO_CHAR函式將從ADD_MONTHS函式中返回的時間值轉換為字串,並指定格式為DD-MON-YYYY HH24:MI:SS

SELECT TO_CHAR(ADD_MONTHS(TO_DATE('01-JAN-2007 19:15:26','DD-MON-YYYY HH24:MI:SS'), 2), 'DD-MON-YYYY HH24:MI:SS')FROM dual;

TO_CHAR(ADD_MONTHS(T

--------------------

01-MAR-2007 19:15:26

 

4.3   NEXT_DAY(d,n)

NEXT_DAY(d,n):返回以時間點d為基準(開始),下一個"目標日n"的日期

SELECT SYSDATE,NEXT_DAY(SYSDATE,'星期二') FROM DUAL;   表示下週二的日期

 

補充:修改當地語言ALTER SESSION SET NLS_LANGUAGE='AMERICAN';

      修改為中文:ALTER SESSION SET NLS_LANGUAGE='SIMPLIFIED CHINESE';

 

在英語的環境中,執行星期幾時要用英文:

select next_day(sysdate,'Friday') from dual;

SQL> SELECT SYSDATE,NEXT_DAY(SYSDATE,'星期二') FROM DUAL;

SELECT SYSDATE,NEXT_DAY(SYSDATE,'星期二') FROM DUAL

                                *

ERROR at line 1:

ORA-01846: not a valid day of the week

 

 

SQL> ALTER SESSION SET NLS_LANGUAGE='SIMPLIFIED CHINESE';

 

會話已更改。

 

SQL>  SELECT SYSDATE,NEXT_DAY(SYSDATE,'星期二') FROM DUAL;

 

SYSDATE             NEXT_DAY(SYSDATE,'

------------------- -------------------

2016-11-20 19:50:07 2016-11-22 19:50:07

 

SQL> select next_day(sysdate,'Friday') from dual;

select next_day(sysdate,'Friday') from dual

                        *

第 1 行出現錯誤:

ORA-01846: 週中的日無效

 

 

SQL> ALTER SESSION SET NLS_LANGUAGE='AMERICAN';

 

Session altered.

 

SQL>  select next_day(sysdate,'Friday') from dual;

 

NEXT_DAY(SYSDATE,'F

-------------------

2016-11-25 19:50:55

 

SQL> select next_day(sysdate,1) from dual;

 

NEXT_DAY(SYSDATE,1)

-------------------

2016-11-27 19:52:50

 

SQL>  ALTER SESSION SET NLS_LANGUAGE='SIMPLIFIED CHINESE';

 

會話已更改。

 

SQL> select next_day(sysdate,1) from dual;

 

NEXT_DAY(SYSDATE,1)

-------------------

2016-11-27 19:52:59

 

SQL>

 

 

在生活中,為了避免因為語言問題導致的命令錯誤,常用下面的方法:

select next_day(sysdate,1) from dual;--1 表示星期日, 7表示星期六,依此類推,不過在用數字作為日期的時候,next_day函式不能夠直接賦值給變數,只能夠透過select into方式.

 

SELECT to_char(next_day(last_day(trunc(SYSDATE)), 7) - 7, 'YYYY-MM-DD')

INTO   v_sdate

FROM   dual;

 

--- 或者 下邊

v_sdate := to_char(next_day(last_day(trunc(SYSDATE)), '星期六') - 7,

                   'YYYY-MM-DD');

--這種錯誤,next_day 使用數字不能直接賦值  ,困擾我很久 2013/1/20 16:40 躺床上突然想到才解決              

v_sdate := to_char(next_day(last_day(trunc(SYSDATE)), 7) - 7, 'YYYY-MM-DD');

 

 

-----  判斷今天是否月份最後一天

WITH T AS

(SELECT   sysdate DAT FROM DUAL)

SELECT DECODE(DAT, LAST_DAY(DAT), 'yes', 'no') FROM T;

 

--- 判斷 '2014-04-30'是否所在月份最後一天

WITH T AS

(SELECT DATE '2014-04-30' DAT FROM DUAL)

SELECT DECODE(DAT, LAST_DAY(DAT), 'yes', 'no') FROM T;

4.4   LAST_DAY

LAST_DAY  :計算給定日期的最後一天,當月的最後一天

Select HIREDATE,LAST_DAY(HIREDATE)-HIREDATE From EMP;

SELECT last_day(TO_DATE('201302', 'yyyymm')),

       last_day(trunc(SYSDATE))

FROM   dual;

wps4A04.tmp 

一、 next_day 和last_day 聯合使用

SELECT trunc(SYSDATE, 'MM') 本月第一天,

       add_months(trunc(SYSDATE, 'MM'), 1) 下個月第一天,

       add_months(trunc(SYSDATE, 'MM'), 1) - 1 本月最後一天,

       next_day(add_months(trunc(SYSDATE, 'MM'), 1) - 1, 7) 本月最後一天的下一個週六,

       next_day(add_months(trunc(SYSDATE, 'MM'), 1) - 1, 7) - 7 本月最後一個週六,

       next_day(last_day(trunc(SYSDATE)), 7) - 7 本月最後一個週六

FROM   dual;

wps4A05.tmp 

4.5   NEW_TIME

NEW_TIME: 調整時區

下邊給出了所有的時區

簡寫時區

AST or ADT 大西洋標準時間

HST or HDT 阿拉斯加_夏威夷時間

BST or BDT 英國夏令時

MST or MDT 美國山區時間

CST or CDT 美國中央時區

NST 新大陸標準時間

EST or EDT 美國東部時區

PST or PDT 太平洋標準時間

GMT 格倫威治標準時間

YST or YDT Yukon標準時間

 

4.6  求2個日期之間的時間差

ORACLE裡日期型別是可以直接進行比較的。舉個例子

SQL> SELECT to_date('2006-12-05', 'yyyy-mm-dd') - to_date('2006-12-07', 'yyyy-mm-dd') FROM dual ;

 

TO_DATE('2006-12-05','YYYY-MM-DD')-TO_DATE('2006-12-07','YYYY-MM-DD')

---------------------------------------------------------------------

                                                               -2

這說明2006-12-05要比7號早2天。

SQL> SELECT to_date('2006-12-07 14:23:24' , 'yyyy-mm-dd hh24:mi:ss') + 1/24 FROM dual ;

 

TO_DATE('2006-12-07

-------------------

2006-12-07 15:23:24

 

SQL>

這是說明在某一時間上加一小時,1是代表一天,1/24就是一小時,同理1/24/60就是一分鐘

 

select trunc(sysdate) - trunc(to_date('2006-05-28 10:20','YYYY-MM-DD HH24:MI')) from dual

 

中計算時間差是經常用到的。可以使用“日期1-日期2”並加以運算,來獲得你要想的時間差:天、小時、分鐘或者秒。

例如:

 SELECT TO_DATE('2012-02-20 17:45:04', 'yyyy-mm-dd hh24:mi:ss') -

       TO_DATE('2012-02-19 08:34:04', 'yyyy-mm-dd hh24:mi:ss') AS DAY

FROM   dual;

  結果:

wps4A06.tmp

這裡的TO_DATE很有用,它決定你的時間儲存格式。

那麼如果要獲取相應的時間單位,下面:

一、 以天為單位

round(to_number(end-date-start_date))

例如:

 SELECT round(to_number(TO_DATE('2012-02-20 17:45:04',

                               'yyyy-mm-dd hh24:mi:ss') -

                       TO_DATE('2012-02-19 08:34:04',

                               'yyyy-mm-dd hh24:mi:ss'))) AS DAY

FROM   dual;

 結果:

wps4A07.tmp

二、 以小時為單位

 

round(to_number(end-date-start_date)*24)

例如:

 SELECT round(to_number(TO_DATE('2012-02-20 17:45:04',

                               'yyyy-mm-dd hh24:mi:ss') -

                       TO_DATE('2012-02-19 08:34:04',

                               'yyyy-mm-dd hh24:mi:ss')) * 24) AS Hour

FROM   dual;

 結果:

wps4A08.tmp

三、 以分鐘為單位

round(to_number(end-date-start_date)*1440)

例如:

SELECT round(to_number(TO_DATE('2012-02-20 17:45:04',

                               'yyyy-mm-dd hh24:mi:ss') -

                       TO_DATE('2012-02-19 08:34:04',

                               'yyyy-mm-dd hh24:mi:ss')) * 1440) AS Minite

FROM   dual; 

結果:

wps4A09.tmp

 

四、 

ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60)

五、 毫秒:

ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60 * 1000)

4.7  常用之日期格式

  

 日期格式                 說明  

------------------------------------------------------------------------  

YYYY/MM/DD              -- 年/月/日   

YYYY                    -- 年(4位)  

YYY                     -- 年(3位)  

YY                      -- 年(2位)  

MM                      -- 月份  

DD                      -- 日期  

D                       -- 星期  

                             -- 星期日 = 1  星期一 = 2 星期二 = 3  

                         -- 星期三 = 4  星期四 = 5 星期五 = 6 星期六 = 7  

                               

DDD                     -- 一年之第幾天  

WW                      -- 一年之第幾週  

W                       -- 一月之第幾週  

YYYY/MM/DD HH24:MI:SS   -- 年/月/日 時(24小時制):分:秒  

YYYY/MM/DD HH:MI:SS     -- 年/月/日 時(非24小時制):分:秒  

 J                       -- Julian dayjulian date指的是公元前4712年1月1日起經過的天數.,104235,1指21世紀,04指第四年,235指這年的第幾天!

RR/MM/DD                -- 公元2000問題   

    -- 00-49 = 下世紀;50-99 = 本世紀  

ex.  

select to_char(sysdate,''YYYY/MM/DD'') FROM DUAL;             -- 2007/09/20  

select to_char(sysdate,''YYYY'') FROM DUAL;                   -- 2007  

select to_char(sysdate,''YYY'') FROM DUAL;                    -- 007  

select to_char(sysdate,''YY'') FROM DUAL;                     -- 07  

select to_char(sysdate,''MM'') FROM DUAL;                     -- 09  

select to_char(sysdate,''DD'') FROM DUAL;                     -- 20  

select to_char(sysdate,''D'') FROM DUAL;                      -- 5  

select to_char(sysdate,''DDD'') FROM DUAL;                    -- 263  

select to_char(sysdate,''WW'') FROM DUAL;                     -- 38  

select to_char(sysdate,''W'') FROM DUAL;                      -- 3  

select to_char(sysdate,''YYYY/MM/DD HH24:MI:SS'') FROM DUAL;  -- 2007/09/20 15:24:13  

select to_char(sysdate,''YYYY/MM/DD HH:MI:SS'') FROM DUAL;    -- 2007/09/20 03:25:23  

select to_char(sysdate,''J'') FROM DUAL;                      -- 2454364

select to_char(sysdate-365,'j') from dual; 

select to_date (to_char(sysdate-365,'j') + trunc(dbms_random.value(0,365)),'j') from dual; 

select to_char(sysdate,''RR/MM/DD'') FROM DUAL;               -- 07/09/20 

4.8  時區

如何判斷資料庫的時區?

select dbtimezone from dual;

select sessiontimezone from dual;

select systimestamp from dual;

select current_date from dual;

select current_timestamp from dual;

5  常用日期查詢

1.獲取當前月份的第一天

執行這個命令能快速返回當前月份的第一天。你可以用任何的日期值替換 “SYSDATE”來指定查詢的日期。

SELECT TRUNC (SYSDATE, 'MONTH') "First day of current month"

FROM DUAL;

 

2.獲取當前月份的最後一天

這個查詢語句類似於上面那個語句,而且充分照顧到了閏年,所以當二月份有 29 號,那麼就會返回 29/2 。你可以用任何的日期值替換 “SYSDATE”來指定查詢的日期。

SELECT TRUNC (LAST_DAY (SYSDATE)) "Last day of current month"

FROM DUAL;

 

3.獲取當前年份的第一天

每年的第一天都是1 月1日,這個查詢語句可以使用在儲存過程中,需要對當前年份第一天做一些計算的時候。你可以用任何的日期值替換 “SYSDATE”來指定查詢的日期。

SELECT TRUNC (SYSDATE, 'YEAR') "Year First Day" FROM DUAL;

 

4.獲取當前年份的最後一天

類似於上面的查詢語句。你可以用任何的日期值替換 “SYSDATE”來指定查詢的日期。

SELECT ADD_MONTHS (TRUNC (SYSDATE, 'YEAR'), 12) - 1 "Year Last Day" FROM DUAL

 

5.獲取當前月份的天數

這個語句非常有用,可以計算出當前月份的天數。你可以用任何的日期值替換 “SYSDATE”來指定查詢的日期。

SELECT CAST (TO_CHAR (LAST_DAY (SYSDATE), 'dd') AS INT) number_of_days

FROM DUAL;

 

6.獲取當前月份剩下的天數

下面的語句用來計算當前月份剩下的天數。你可以用任何的日期值替換 “SYSDATE”來指定查詢的日期。

SELECT SYSDATE,

LAST_DAY (SYSDATE) "Last",

LAST_DAY (SYSDATE) - SYSDATE "Days left"

FROM DUAL;

 

7.獲取兩個日期之間的天數

使用這個語句來獲取兩個不同日期自檢的天數。

SELECT ROUND ( (MONTHS_BETWEEN ('01-Feb-2014', '01-Mar-2012') * 30), 0)

   num_of_days

FROM DUAL;

 

OR

 

SELECT TRUNC(sysdate) - TRUNC(e.hire_date) FROM employees;

如果你需要查詢一些特定日期的天數,可以使用第二個查詢語句。這個例子是計算員工入職的天數。

 

8.顯示當前年份截止到上個月每個月份開始和結束的日期

這個是個很聰明的查詢語句,用來顯示當前年份每個月的開始和結束的日期,你可以使用這個進行一些型別的計算。你可以用任何的日期值替換 “SYSDATE”來指定查詢的日期。

SELECT ADD_MONTHS (TRUNC (SYSDATE, 'MONTH'), i) start_date,

       TRUNC (LAST_DAY (ADD_MONTHS (SYSDATE, i))) end_date

  FROM XMLTABLE (

          'for iin0toxs:int(D)return iin0toxs:int(D)return i'

          PASSING XMLELEMENT (

                     d,

                     FLOOR (

                        MONTHS_BETWEEN (

                           ADD_MONTHS (TRUNC (SYSDATE, 'YEAR') - 1, 12),

                           SYSDATE)))

          COLUMNS i INTEGER PATH '.');

 

9.獲取直到目前為止今天過去的秒數(從 00:00 開始算)

SELECT (SYSDATE - TRUNC (SYSDATE)) * 24 * 60 * 60 num_of_sec_since_morning

FROM DUAL;

 

10.獲取今天剩下的秒數(直到 23:59:59 結束)

SELECT (TRUNC (SYSDATE+1) - SYSDATE) * 24 * 60 * 60 num_of_sec_left

  FROM DUAL;

 

About Me

...............................................................................................................................

本文作者:小麥苗,只專注於資料庫的技術,更注重技術的運用

本文在itpub(http://blog.itpub.net/26736162)、部落格園(http://www.cnblogs.com/lhrbest)和個人微信公眾號()上有同步更新

本文itpub地址:http://blog.itpub.net/26736162/viewspace-2128764/

本文部落格園地址:http://www.cnblogs.com/lhrbest/p/6083478.html

本文pdf版小麥苗雲盤地址:http://blog.itpub.net/26736162/viewspace-1624453/

● QQ群:230161599     微信群:私聊

聯絡我請加QQ好友(642808185),註明新增緣由

於 2016-11-20 18:00 ~ 2016-11-20 21:00 在泰興公寓完成

文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

版權所有,歡迎分享本文,轉載請保留出處

...............................................................................................................................

手機長按下圖識別二維碼或微信客戶端掃描下邊的二維碼來關注小麥苗的微信公眾號:xiaomaimiaolhr,免費學習最實用的資料庫技術。

wps4A1A.tmp

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30496894/viewspace-2134122/,如需轉載,請註明出處,否則將追究法律責任。

相關文章