<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-124  評論-49  文章-56  trackbacks-0

    數字函數

    1.1、ABS(n)函數
    描述:返回數值n的絕對值。

    Examples:select abs(-15) “test” from dual;

    1.2、ACOS(n)函數
    描述:返回數值n的反余弦值。輸入數值范圍在-1~1之間,返回值為弧度。

    Examples:select acos(0.6) “test”,acos(-.6) “test1” from dual;

    1.3、COS(n)函數
    描述: 返回數值n的余弦值。返回值為弧度。

    Examples:select cos(1.6) “test”,cos(-6) “test1” from dual;

    1.4、SIN(n)函數
    描述: 返回數值n的正弦值。

    Examples:select sin(1.6) “test”,sin(-6) “test1” from dual;

    1.5、ASIN(n)函數
    描述: 返回數值n的反正弦值。輸入數值范圍在-1~1之間,返回值為弧度。

    Examples:select asin(0.6) “test”,asin(-0.6) “test1” from dual;

    1.6、TAN(n)函數
    描述: 返回數值n的正切值。

    Examples:select tan(6) “test”,tan(-0.6) “test1” from dual;

    1.7、ATAN(n)函數
    描述: 返回數值n的反正切值。輸入數值任意,返回值為弧度。

    Examples:select atan(6) “test”,atan(-0.6) “test1” from dual;

    1.8、ATAN2(n,m)函數
    描述: 返回數值n/m的反正切值。輸入數值任意,返回值為弧度。

    Examples:select atan2(19,3) “test”,atan2(-9,-0.9) “test1” from dual;

    1.9、SINH(n)函數
    描述: 返回數值n的雙曲正弦值。輸入數值任意。

    Examples:select sinh(6) “test”,sinh(-0.6) “test1” from dual;

    1.10、TANH(n)函數
    描述: 返回數值n的雙曲正切值。輸入數值任意。

    Examples:select tanh(6) “test”,tanh(-0.6) “test1” from dual;

    1.11、CEIL(n)函數
    描述: 返回大于等于數值n的最小整數。

    Examples:select ceil(6) “test”,ceil(6.6) “test1” from dual;

    1.12、COSH(n)函數
    描述: 返回數值n的雙曲余弦值。

    Examples:select cosh(6) “test”,cosh(6.6) “test1” from dual;

    1.13、EXP(n)函數
    描述: 返回e的n次冥。(e=2.71828183…)

    Examples:select exp(6) “test” from dual;

    1.14、FLOOR(n)函數
    描述: 返回小于等于數值n的最大整數。

    Examples:select floor(6) “test”,floor(9.3) “test1” from dual;

    1.15、LN(n)函數
    描述: 返回數值n的自然對數。(n必須大于0)

    Examples:select ln(6) “test” from dual;

    1.16、LOG(m,n)函數
    描述: 返回以m為底的數值n的對數。(m>1,n>0)

    Examples:select log(6,3) “test” from dual;

    1.17、MOD(m,n)函數
    描述: 返回m/n后的余數,若n=0,則返回m(求模運算)

    Examples:select mod(6,3) “test” from dual;

    1.18、POWER(m,n)函數
    描述: 返回m的n次冥

    Examples:select power(6,3) “test” from dual;

    1.19、ROUND(n,[m])函數
    描述: 執行四舍五入運算,m可以省略,當省略m時,四舍五入到整數位;當m為正數時,四舍五入到小數點后m位;當m為負數時,四舍五入到小數點前m位。

    Examples:select round(6.698,2) “test” from dual;

    1.20、SIGN(n)函數
    描述: 檢測數值的正負,當n<0則返回-1;當n>0則返回1,當n=0返回0。

    Examples:select sign(6.698) “test”,sign(-9) “test1”,sign(0) “test2” from dual;

    1.21、SQRT(n)函數
    描述: 返回數值n的平方根。(n>=0)

    Examples:select sqrt(6.698) “test” from dual;

    1.22、TRUNC(n,[m])函數
    描述: 截取數值n,m可以省略,當省略m時則截取n的小數部分;當m為正數時則將n截取到小數點后m位;當m為負數時則將n截取到小數點前m位

    Examples:select trunc(6.698,2) “test”,trunk(696.3,-2) “test1” from dual;

    字符函數


    說明:字符函數輸入值為字符類型,返回值為字符類型或數字類型,可以在sql語句中直接使用,也可以在pl/sql塊中使用。

    2.1、ASCII(n)函數
    描述: 返回字符串的ascii碼(當輸入為字符串時返回第一個字符的ascii碼)

    Examples:select ascii(‘A’) “test”,ascii(‘我們’) “test1” from dual;

    2.2、CHR(n)函數
    描述: 返回對應的ascii碼的字符(n必須為數字類型)

    Examples:select ascii(54992) “test” from dual;

    2.3、CONCAT(n,m)函數
    描述: 連接n和m,n和m可以是字符,也可以是字符串。作用和”||”一樣。

    Examples:select concat(‘中國’,’人民’) “test” from dual;

    2.4、INITCAP(n)函數
    描述: 將字符串n中每個單詞首字母大寫,其余小寫(區分單詞的規則是按空格或非字母字符;可以輸入中文字符,但沒有任何作用)

    Examples:select initcap(‘中 國 人 民’) “test”,initcap(‘my word’) “test1”,initcap(‘my中國word’) “test2” from dual;

    2.5、INSTR(chr1,chr2,[n,[m]])函數
    描述: 獲取字符串chr2在字符串chr1中出現的位置。n和m可選,省略是默認為1;n代表開始查找的起始位置,當n為負數從尾部開始搜索;m代表字串出現的次數。

    Examples:select instr('pplkoopijk','k',-1,1) “test” from dual;

    備注:當n為負數從尾部搜索,但返回值仍然是按正向排列得出的位置。

    2.6、LENGTH(n)函數
    描述: 返回字符或字符串長度。(當n為null時,返回nll;返回的長度包括后面的空格)

    Examples:select length('ppl ') “test”,length(null) “test1” from dual;

    2.7、LOWER(n)函數
    描述: 將n轉換為小寫。

    Examples:select lower('KKKD') “test” from dual;

    2.8、LPAD(chr1,n,[chr2])函數
    描述: 在chr1左邊填充字符chr2,使得字符總長度為n。chr2可選,默認為空格;當chr1字符串長度大于n時,則從左邊截取chr1的n個字符顯示。

    Examples:select lpad('kkk',5) “test”,lpad(‘kkkkk’,4) “test1”,lpad(‘kkk’,6,’lll’) “test2” from dual;

    2.9、LTRIM(chr,[n])函數
    描述: 去掉字符串chr左邊包含的n字符串中的任何字符,直到出現一個不包含在n中的字符為止。

    Examples:select ltrim('abcde',’a’) “test”,ltrim(‘abcde’,’b’) “test1”,ltrim(‘abcdefg’,’cba’) “test2” from dual;

    2.10、NLS_INITCAP(chr,[’nls_param’])函數
    描述: 將chr首字母大寫。Nls_param可選,指定排序的方式。(有SCHINESE_RADICAL_M(部首、筆畫),SCHINESE_STROKE_M(筆畫、部首),SCHINESE_PINYIN_M(拼音))

    Examples:select nls_initcap('ab cde') “test”,nls_initcap(‘a b c d e’,’nls_sort= SCHINESE_PINYIN_M’) “test1” from dual;

    2.11、NLS_LOWER(chr,[‘nls_param’])函數
    描述: 將字符串轉換為小寫。Nls_param可選,指定排序的方式。(有SCHINESE_RADICAL_M(部首、筆畫),SCHINESE_STROKE_M(筆畫、部首),SCHINESE_PINYIN_M(拼音))

    Examples:select nls_lower('ABC') “test”,nls_lower(‘ABC’,’nls_sort= SCHINESE_PINYIN_M’) “test1” from dual;

    2.12、NLSSORT(col,[’nls_param’])函數
    描述: 根據nls_param指定的方式對col字段進行排序。

    Examples:SELECT part_number FROM cux_om_part_all ORDER BY nlssort(part_number,'nls_sort=SCHINESE_RADICAL_M')

    2.13、NLS_UPPER(chr,[‘nls_param’])函數
    描述: 將chr轉換為大寫。Nls_param可選,用于指定排序規則

    Examples:SELECT nls_upper('ddddd','nls_sort=xdanish') FROM dual

    2.14、REGEXP_REPLACE(source_string,pattern,replace_string,position,occurtence,match_parameter)函數(10g新函數)
    描述:字符串替換函數。相當于增強的replace函數。Source_string指定源字符表達式;pattern指定規則表達式;replace_string指定用于替換的字符串;position指定起始搜索位置;occurtence指定替換出現的第n個字符串;match_parameter指定默認匹配操作的文本串。

    其中replace_string,position,occurtence,match_parameter參數都是可選的。

    2.15、REGEXP_SUBSTR(source_string, pattern[,position [, occurrence[, match_parameter]]])函數(10g新函數)
    描述:返回匹配模式的子字符串。相當于增強的substr函數。Source_string指定源字符表達式;pattern指定規則表達式;position指定起始搜索位置;occurtence指定替換出現的第n個字符串;match_parameter指定默認匹配操作的文本串。

    其中position,occurtence,match_parameter參數都是可選的

    Examples:select regexp_substr(‘http://www.oracle.com/products’,’http://([[:alnum:]]+\.?) {3,4} / ?’) “regexp_substr” from dual

    2.16、REGEXP_LIKE(source_string, pattern
    [, match_parameter])函數(10g新函數)
    描述:返回滿足匹配模式的字符串。相當于增強的like函數。Source_string指定源字符表達式;pattern指定規則表達式;match_parameter指定默認匹配操作的文本串。

    其中position,occurtence,match_parameter參數都是可選的

    Examples:

    2.17、REGEXP_INSTR(source_string, pattern
    [, start_position
    [, occurrence
    [, return_option
    [, match_parameter]]]])函數(10g新函數)

    描述: 該函數查找 pattern ,并返回該模式的第一個位置。您可以隨意指定您想要開始搜索的 start_position。 occurrence 參數默認為 1,除非您指定您要查找接下來出現的一個模式。return_option 的默認值為 0,它返回該模式的起始位置;值為 1 則返回符合匹配條件的下一個字符的起始位置

    Examples:

     

    附注:上面紅色標題的四個函數是oracle 10g才有的函數,使用正則表達式可以實現很強大的功能。鑒于變化太多,可以參考oracle的官方文檔:SQL Reference(第七章)
    2.18、REPLACE(chr,search_string,[,replacement_string])函數
    描述:將chr中滿足search_string條件的替換為replacement_string指定的字符串,當search_string為null時,返回chr;當replacement_string為null時,返回chr中截取掉search_string部分的字符串。

    Examples: SELECT REPLACE('abcdeef','e','oo') "test",REPLACE('abcdeef','ee','oo') "test1",REPLACE('abcdeef',NULL,'oo') "test2",REPLACE('abcdeef','ee',NULL) "test3" FROM dual

    2.19、RPAD(chr1,n,chr2)函數
    描述:在chr1右邊填充chr2,使返回字符串長度為n..當chr1長度大于n時,返回左端n個字符。參考LPAD()函數。

    2.20、RTRIM(chr,[set])函數
    描述:去掉chr右邊包含的set中的任何字符,直到出現一個不是set中的字符結束。參考LTRIM()函數。

    2.21、SOUNDEX(chr)函數
    描述:返回字符串的語音表示,可以用來比較字符串的發音是否相同。

    Examples:select soundex(‘ship’) “test”,soundex(‘sleep’) “test1” from dual;

    2.22、SUBSTR(chr,m[,n])函數
    描述:取chr的子串。M代表開始位置,n是要取的長度。當m為0時從首字符開始,當m為負時從字符串尾部開始截取。

    Examples:select substr(‘abcdef’,0,3) “test”,substr(‘abcdef’,1,3) “test1”,substr(‘abcdef’,-3,3) “test2”,substr(‘abcdef’,-1,3) “test3” from dual

    注意:m取0或1時,開始位置是一樣的,都是從第一位開始,m為負的時候,仍然是按從左到右的順序取,所以如果m為-1,n的長度再大,也只能取到最后一個字符,因為chr右邊已經沒有字符了。

    2.23、TRANSLATE(chr,from_str,to_str)函數
    描述:另一種替換函數的用法。

    Examples: SELECT translate('abcdeabc','abc','fgh') "test",translate('abcdeabc','abc','hf') "test1",translate('abcdeabc','ab','hfgh') "test2",translate('abcdeabc','abc',' ') "test3" FROM dual

    注意:匹配的規則是from_str和to_str每個字符按順序相對應,如果from_str字符少于to_str中的字符,則只替換能對應的字符,to_str后面不能和from_str對應的字符則不管,如果from_str字符多于to_str字符,則from_str中找不到對應字符按照null來處理。

    2.24、TRIM(chr)函數
    TRIM函數將字符串的前綴(或尾隨)字符刪除。

    其具體的語法格式如下:

    TRIM([LEADING|TRAILING|BOTH][trimchar FROM] string)

    其中:

    LEADING 指明僅僅將字符串的前綴字符刪除

    TRAILING 指明僅僅將字符串的尾隨字符刪除

    BOTH 指明既刪除前綴字符,也刪除尾隨字符。這也是默認方式

    string 任意一待處理字符串

    trimchar 可選項。指明試圖刪除什么字符,默認被刪除的字符是空格

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

    TRIM(’ Ashley ’)=‘Ashley’

    TRIM(LEADING ’*’ FROM’***Ashley***’)=‘Ashley***’

    2.25、UPPER(chr)函數
    UPPER函數間返回字符串的大寫形式。

    其具體的語法格式如下:

    UPPER(string)

    其中:

    string 任意VARCHAR2或CHAR型字符串

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

    UPPER(’THIS IS a Test’)=‘THIS IS A TEST’

    日期函數

    3.1、add_months(d,n)
    說明:用于從一個日期值增加或減少一些月份,d代表一個日期,n為正數則代表在d日期 上增加n月份,n為負數則代表在d日期上減少n月
    例:select add_months(sysdate,12) "Next Year" from dual;
    3.2、current_date()

    說明:返回當前會話時區中的當前日期時間
    alter session set time_zone=’-11:00’(更改當前會話時區命令)
    例:select sessiontimezone,current_date from dual;
    3.3、dbtimezone()

    說明:返回數據庫實例時區
    select dbtimezone from dual;
    3.4、extract()

    說明:顯示指定格式的日期值。
    select extract(month from sysdate) "This Month" from dual;
    select extract(year from add_months(sysdate,36)) "3 Years Out" from dual;
    3.5、last_day()

    說明:返回包含了日期參數的月份的最后一天的日期
    select last_day(sysdate) "last" from dual;
    3.6、months_between(d1,d2)

    說明:返回d1和d2兩個月份之間相差的月數,若d1<d2,返回負數;d1>d2,返回正數;若d1和d2都是月底或者天數相同,則返回整數,否則以每月31天為基準數返回小數。
    select months_between(to_date('2007-01-31','yyyy-mm-dd'),to_date('2006-11-30','yyyy-mm-dd')) from dual;
    3.7、next_day(d,varchar2)

    說明:返回日期d指定的在日期d之后的第一個工作日;

    SELECT next_day(SYSDATE,'星期四') FROM dual;

    Select next_day(sysdate,’monday’) from dual; 錯誤,不能使用英文單詞

    返回當前日期后的第一個星期四的日期。若當前日期已經是星期四或過了星期四,則返回下周的星期四對應的日期,否則返回本周星期四的日期。

    注意:varchar2指定工作日的時候和當前數據庫實例的參數設置有關,字符串需要用中文寫,如果中文不行,就使用英文星期代表。

    3.8、round(d,fmt)
    說明:返回日期時間的四舍五入結果。如果fmt指定年,則以7月1日為分界;如果指定月,則以16日為分界;關于按天來四舍五入,在測試時無法理解(資料上解釋按天的時候是以中午12:00為分界)

    Select round(sysdate,’month’) from dual;

    3.9、trunc(d,fmc)
    說明:按照指定的格式截斷日期,如果指定格式為年,則結果為本年1月1日,如果格式指定為月,則結果為本月1日,關于格式指定為天還未理解。

    SELECT trunc(SYSDATE,'month') FROM dual;

    3.10、sysdate

    應用:
    1. 日期和字符轉換函數用法(to_date,to_char)

    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual; //日期轉化為字符串
    select to_char(sysdate,'yyyy') as nowYear from dual; //獲取時間的年
    select to_char(sysdate,'mm') as nowMonth from dual; //獲取時間的月
    select to_char(sysdate,'dd') as nowDay from dual; //獲取時間的日
    select to_char(sysdate,'hh24') as nowHour from dual; //獲取時間的時
    select to_char(sysdate,'mi') as nowMinute from dual; //獲取時間的分
    select to_char(sysdate,'ss') as nowSecond from dual; //獲取時間的秒


    select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual//

    2. select to_char( to_date(222,'J'),'Jsp') from dual

    顯示Two Hundred Twenty-Two

    3.求某天是星期幾
    select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;
    星期一
    select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
    monday
    設置日期語言
    ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
    也可以這樣
    TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')

    4. 兩個日期間的天數
    select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;

    5. 時間為null的用法
    select id, active_date from table1
    UNION
    select 1, TO_DATE(null) from dual;

    注意要用TO_DATE(null)

    6.月份差
    a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')
    那么12月31號中午12點之后和12月1號的12點之前是不包含在這個范圍之內的。
    所以,當時間需要精確的時候,覺得to_char還是必要的

    7. 日期格式沖突問題
    輸入的格式要看你安裝的ORACLE字符集的類型, 比如: US7ASCII, date格式的類型就是: '01-Jan-01'
    alter system set NLS_DATE_LANGUAGE = American
    alter session set NLS_DATE_LANGUAGE = American
    或者在to_date中寫
    select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
    注意我這只是舉了NLS_DATE_LANGUAGE,當然還有很多,
    可查看
    select * from nls_session_parameters
    select * from V$NLS_PARAMETERS
    8.
    select count(*)
    from ( select rownum-1 rnum
    from all_objects
    where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-
    02-01','yyyy-mm-dd')+1
    )
    where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )
    not in ( '1', '7' )

    查找2002-02-28至2002-02-01間除星期一和七的天數
    在前后分別調用DBMS_UTILITY.GET_TIME, 讓后將結果相減(得到的是1/100秒, 而不是毫秒).

    9. 查找月份
    select months_between(to_date('01-31-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
    1
    select months_between(to_date('02-01-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;
    1.03225806451613

    10. Next_day的用法
    Next_day(date, day)

    Monday-Sunday, for format code DAY
    Mon-Sun, for format code DY
    1-7, for format code D

    11
    select to_char(sysdate,'hh:mi:ss') TIME from all_objects
    注意:第一條記錄的TIME 與最后一行是一樣的
    可以建立一個函數來處理這個問題
    create or replace function sys_date return date is
    begin
    return sysdate;
    end;

    select to_char(sys_date,'hh:mi:ss') from all_objects;

    12.獲得小時數
    extract()找出日期或間隔值的字段值
    SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer
    SQL> select sysdate ,to_char(sysdate,'hh') from dual;

    SYSDATE TO_CHAR(SYSDATE,'HH')
    -------------------- ---------------------
    2003-10-13 19:35:21 07

    SQL> select sysdate ,to_char(sysdate,'hh24') from dual;

    SYSDATE TO_CHAR(SYSDATE,'HH24')
    -------------------- -----------------------
    2003-10-13 19:35:21 19


    13.年月日的處理
    select older_date,
    newer_date,
    years,
    months,
    abs(
    trunc(
    newer_date-
    add_months( older_date,years*12+months )
    )
    ) days

    from ( select
    trunc(months_between( newer_date, older_date )/12) YEARS,
    mod(trunc(months_between( newer_date, older_date )),12 ) MONTHS,
    newer_date,
    older_date
    from (
    select hiredate older_date, add_months(hiredate,rownum)+rownum newer_date
    from emp
    )
    )

    14.處理月份天數不定的辦法
    select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual

    16.找出今年的天數
    select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual

    閏年的處理方法
    to_char( last_day( to_date('02' | | :year,'mmyyyy') ), 'dd' )
    如果是28就不是閏年

    17.yyyy與rrrr的區別
    'YYYY99 TO_C
    ------- ----
    yyyy 99 0099
    rrrr 99 1999
    yyyy 01 0001
    rrrr 01 2001

    18.不同時區的處理
    select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate
    from dual;

    19.5秒鐘一個間隔
    Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')
    from dual

    2002-11-1 9:55:00 35786
    SSSSS表示5位秒數

    20.一年的第幾天
    select TO_CHAR(SYSDATE,'DDD'),sysdate from dual

    310 2002-11-6 10:03:51

    21.計算小時,分,秒,毫秒
    select
    Days,
    A,
    TRUNC(A*24) Hours,
    TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,
    TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,
    TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds
    from
    (
    select
    trunc(sysdate) Days,
    sysdate - trunc(sysdate) A
    from dual
    )

    select * from tabname
    order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');

    //
    floor((date2-date1) /365) 作為年
    floor((date2-date1, 365) /30) 作為月
    d(mod(date2-date1, 365), 30)作為日.

    23.next_day函數 返回下個星期的日期,day為1-7或星期日-星期六,1表示星期日
    next_day(sysdate,6)是從當前開始下一個星期五。后面的數字是從星期日開始算起。
    1 2 3 4 5 6 7
    日 一 二 三 四 五 六

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

    select (sysdate-to_date('2003-12-03 12:55:45','yyyy-mm-dd hh24:mi:ss'))*24*60*60 from ddual
    日期 返回的是天 然后 轉換為ss

    24,round[舍入到最接近的日期](day:舍入到最接近的星期日)
    select sysdate S1,
    round(sysdate) S2 ,
    round(sysdate,'year') YEAR,
    round(sysdate,'month') MONTH ,
    round(sysdate,'day') DAY from dual

    25,trunc[截斷到最接近的日期,單位為天] ,返回的是日期類型
    select sysdate S1,
    trunc(sysdate) S2, //返回當前日期,無時分秒
    trunc(sysdate,'year') YEAR, //返回當前年的1月1日,無時分秒
    trunc(sysdate,'month') MONTH , //返回當前月的1日,無時分秒
    trunc(sysdate,'day') DAY //返回當前星期的星期天,無時分秒
    from dual

    26,返回日期列表中最晚日期
    select greatest('01-1月-04','04-1月-04','10-2月-04') from dual

    27.計算時間差
    注:oracle時間差是以天數為單位,所以換算成年月,日

    select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))/365) as spanYears from dual //時間差-年
    select ceil(moths_between(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanMonths from dual //時間差-月
    select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanDays from dual //時間差-天
    select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24) as spanHours from dual //時間差-時
    select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60) as spanMinutes from dual //時間差-分
    select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60*60) as spanSeconds from dual //時間差-秒

    28.更新時間
    注:oracle時間加減是以天數為單位,設改變量為n,所以換算成年月,日
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n*365,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改變時間-年
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),add_months(sysdate,n) as newTime from dual //改變時間-月
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改變時間-日
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改變時間-時
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24/60,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改變時間-分
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24/60/60,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改變時間-秒

    29.查找月的第一天,最后一天
    SELECT Trunc(Trunc(SYSDATE, 'MONTH') - 1, 'MONTH') First_Day_Last_Month,
    Trunc(SYSDATE, 'MONTH') - 1 / 86400 Last_Day_Last_Month,
    Trunc(SYSDATE, 'MONTH') First_Day_Cur_Month,
    LAST_DAY(Trunc(SYSDATE, 'MONTH')) + 1 - 1 / 86400 Last_Day_Cur_Month
    FROM dual;

    轉換函數

    4.1、asciistr(str)
    說明:將任意字符集的字符串轉換為當前數據庫實例對應的ascii字符串。

    SELECT asciistr('中華民族') FROM dual;

    備注:和該函數相似的有ascii,它是取得字符串第一個字符的ascii碼,后面的字符不管;chr是將ascii碼轉換為對應的字符。

    4.2、cast()
    說明:將一個內置數據類型或集合類型轉變為另一個內置數據類型或集合類型。

    SELECT CAST(SYSDATE AS VARCHAR2(100)) FROM dual;

    4.3、chartorowid(str)
    說明:將字符串轉變為rowid數據類型,但字符串必須符合rowid格式。

    4.4、convert(str,char_set,source_char_set)
    說明:將字符串從一個字符集轉變為另一個字符集。Str為要轉變的字符串,char_set為轉變后的字符集,source_char_set為該字符串原始的字符集。

    SELECT convert('中國','US7ASCII','ZHS16GBK') FROM dual;

    4.4、rowidtochar(rowid)
    說明:將rowid轉換為對應的varchar2數據類型值。

    4.5、to_char()
    select to_char(n’中國’) from dual; 轉變為本地字符集類型

    select to_char(10000,’L99G999D99MI’) from dual; 轉換成貨幣格式

    4.6、to_date()
    轉變為日期格式。

    4.7、to_number()
    將字符串轉變為數字值,但字符串必須是數字(0~9)。

    單行函數

    decode(exer.search1,result1[search2,result2,...][,defalut])
    用于匹配特定表達式的結果,如果search1匹配于exer,則返回result1,如果search2匹配于exer則返回result2,
    依次類推,如果沒有任何匹配關系則返回defalut

    分組函數


    6.1AVG 取平均值
    Select AVG(SAL) From EMP

    6.2max 取最大值
    select max(sal) from emp

    6.3min 取最小值
    select min(sal) from emp

    6.4count 取記錄數
    SELECT COUNT(*) FROM EMP
    也可以
    select count(empno) from emp
    注意:
    要么count(*)
    要么count(沒有null值的列---主鍵)

     

    6.5sum 求和
    Select SUM(SAL*12) From EMP

    應用:

    1.分組函數和distinct關鍵詞的搭配
    Select COUNT(Distinct SAL) From EMP

     

    2.組函數與空值
    select count(comm) from emp
    空值不參與運算,直接被過濾掉

     

    3.分組數據
    group by子句
    SELECT COUNT(*) FROM EMP GROUP BY DEPTNO

    4.使用group by規則
    A.group by后面的字段不必顯示在select列表中
    B.反之則不行
    也就是說:select后面的字段必須在group by子句中出現
    例外的是:
    在組函數(count,max,min等)中出現的字段除外

    5.關于group by條件分組的問題
    A.group by可以和where來搭配
    where只能在group by的前面
    Select JOB From EMP Where SAL>2000 Group By JOB
    group by后面不能有where

    B.where子句中不能包括組函數
    條件的表達只能使用having來表示
    Select DEPTNO,Max(SAL),Min(SAL) From EMP Group By DEPTNO Having Max(SAL)>2000

    對象函數

    posted on 2010-07-28 18:22 junly 閱讀(773) 評論(0)  編輯  收藏 所屬分類: oracle/mysql/sql
    主站蜘蛛池模板: 成人免费午夜在线观看| 十八禁无码免费网站| 精品免费国产一区二区| 亚洲人成免费网站| 国产92成人精品视频免费| 久久精品亚洲精品国产色婷| 一级特黄aa毛片免费观看| 亚洲成av人在线视| 中文字幕免费观看| 亚洲国产模特在线播放| 一个人免费高清在线观看| 亚洲日韩一区二区三区| 在线永久免费观看黄网站| 羞羞视频免费观看| 国产亚洲AV手机在线观看| 99re8这里有精品热视频免费 | 精品免费国产一区二区| 国产亚洲视频在线观看| 久久久久亚洲AV成人网人人网站 | 99麻豆久久久国产精品免费| 日本亚洲成高清一区二区三区| 国产一精品一av一免费爽爽 | 亚洲小说区图片区另类春色| 嫩草在线视频www免费看| 亚洲国产成人久久精品app | 免费三级毛片电影片| 久久精品国产亚洲AV天海翼| 亚洲伦乱亚洲h视频| 免费精品一区二区三区第35| 亚洲日韩国产精品无码av| 国产精品视频免费一区二区三区| 曰批全过程免费视频观看免费软件| 国产L精品国产亚洲区久久| 污污网站免费观看| 日韩国产精品亚洲а∨天堂免| 亚洲乱码中文字幕手机在线| 最近2018中文字幕免费视频| 国产成人综合亚洲绿色| 亚洲av无码一区二区乱子伦as| 成人av免费电影| 国产白丝无码免费视频|