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

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

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

    巷尾的酒吧

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      64 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks

    #

         摘要: l        方括號表達示方括號表達式描述[[:alnum:]]字母和數字混合的字符[[:alpha:]]字母字符[[:cntrl:]]控制字符[[:digit:]]數字字符[[:graph:]]圖像字符[[:lower:]]小寫字母字符[[:print:]]打印字符[[:punct:]]標點符號字符[[:spac...  閱讀全文
    posted @ 2012-10-11 20:06 abing 閱讀(298) | 評論 (0)編輯 收藏

    簡要比較:

          replace 字符串級別的代替

         如:SELECT REPLACE('accd','cd','ef') from dual; --> aefd

     

         translate 字符級別的代替

         如:select translate('acdd','cd','ef') from dual; -->aeff


    replace('將要更改的字符串','被替換掉的字符串','替換字符串')

    例:select  replace ('111222333444','222','888') from dual;

    輸出為 '111888333444'


    分別詳解

         replace:

         語法:REPLACE(char,search_string[,replacement_string])

         解釋:replace中,每個search_string都被replacement_string所代替

            select replace('acdd','cd','ef') from dual; --> aefd

     

         如果replacement_string為空或為null,那么所有的search_string都被移除

         select replace('acdd','cd','') from dual; --> ad

     

         如果search_string 為null,那么就返回原來的char

         select replace('acdd','ef') from dual; -->acdd

         select replace('acdd','','') from dual; -->acdd(也是兩者都為空的情況)

     

     

          translate:

          語法:TRANSLATE('char','from_string','to_string')

          解釋:translate中,每個from_string中的字符被to_string中

            

            舉例說明:


            select translate('asd12fg','12','55') from dual

    posted @ 2012-10-11 19:55 abing 閱讀(214) | 評論 (0)編輯 收藏

    oracle的substr函數的用法
     取得字符串中指定起始位置和長度的字符串   substr( string, start_position, [ length ] )
     如:
         substr('This is a test'62)     would return 'is'
         substr('This is a test'6)     would return 'is a test'
         substr('TechOnTheNet'-33)     would return 'Net'
         substr('TechOnTheNet'-63)     would return 'The'

      select substr('Thisisatest', -4, 2) value from dual    結果是   te

    select substr('emros',-3,1) value from dual      結果是 r

     

    substr('abcde',-6) = null
    substr('abcde',-5) = 'abcde'
    substr('abcde',-4) = 'bcde'
    substr('abcde',-3) = 'cde'
    substr('abcde',-2) = 'de'
    substr('abcde',-1) = 'e'
    substr('abcde',-0) = 'abcde'

    posted @ 2012-10-11 17:49 abing 閱讀(228) | 評論 (0)編輯 收藏

    INSTR

      (源字符串, 目標字符串, 起始位置, 匹配序號)

      在Oracle/PLSQL中,instr函數返回要截取的字符串在源字符串中的位置。只檢索一次,就是說從字符的開始

      到字符的結尾就結束。

      語法如下:

      instr( string1, string2 [, start_position [, nth_appearance ] ] )

      參數分析:

      string1

      源字符串,要在此字符串中查找。

      string2

      要在string1中查找的字符串.

      start_position

      代表string1 的哪個位置開始查找。此參數可選,如果省略默認為1. 字符串索引從1開始。如果此參數為正,從左到右開始檢索,如果此參數為負,從右到左檢索,返回要查找的字符串在源字符串中的開始索引。

      nth_appearance

      代表要查找第幾次出現的string2. 此參數可選,如果省略,默認為 1.如果為負數系統會報錯。

      注意:

      如果String2在String1中沒有找到,instr函數返回0.



    示例如下:

    select instr('adsda','a') from dual
    select instr('adsda','a',1,2) from dual
    select instr('adsda','a',-1,2) from dual






    posted @ 2012-10-11 17:46 abing 閱讀(190) | 評論 (0)編輯 收藏

    ORACLE中的支持正則表達式的函數主要有下面四個:
    1,REGEXP_LIKE :與LIKE的功能相似
    2,REGEXP_INSTR :與INSTR的功能相似
    3,REGEXP_SUBSTR :與SUBSTR的功能相似
    4,REGEXP_REPLACE :與REPLACE的功能相似
    它們在用法上與Oracle SQL 函數LIKE、INSTR、SUBSTR 和REPLACE 用法相同,
    但是它們使用POSIX 正則表達式代替了老的百分號(%)和通配符(_)字符。
    POSIX 正則表達式由標準的元字符(metacharacters)所構成:
    '^' 匹配輸入字符串的開始位置,在方括號表達式中使用,此時它表示不接受該字符集合。
    '$' 匹配輸入字符串的結尾位置。如果設置了 RegExp 對象的 Multiline 屬性,則 $ 也匹
    配 '\n' 或 '\r'。
    '.' 匹配除換行符之外的任何單字符。
    '?' 匹配前面的子表達式零次或一次。
    '+' 匹配前面的子表達式一次或多次。
    '*' 匹配前面的子表達式零次或多次。
    '|' 指明兩項之間的一個選擇。例子'^([a-z]+|[0-9]+)$'表示所有小寫字母或數字組合成的
    字符串。
    '( )' 標記一個子表達式的開始和結束位置。
    '[]' 標記一個中括號表達式。
    '{m,n}' 一個精確地出現次數范圍,m=<出現次數<=n,'{m}'表示出現m次,'{m,}'表示至少
    出現m次。
    \num 匹配 num,其中 num 是一個正整數。對所獲取的匹配的引用。
    字符簇:
    [[:alpha:]] 任何字母。
    [[:digit:]] 任何數字。
    [[:alnum:]] 任何字母和數字。
    [[:space:]] 任何白字符。
    [[:upper:]] 任何大寫字母。
    [[:lower:]] 任何小寫字母。
    [[:punct:]] 任何標點符號。
    [[:xdigit:]] 任何16進制的數字,相當于[0-9a-fA-F]。
    各種操作符的運算優先級
    \轉義符
    (), (?:), (?=), [] 圓括號和方括號
    *, +, ?, {n}, {n,}, {n,m} 限定符
    ^, $, anymetacharacter 位置和順序
    |
    */
    --創建表
    create table fzq
    (
    id varchar(4),
    value varchar(10)
    );
    --數據插入
    insert into fzq values
    ('1','1234560');
    insert into fzq values
    ('2','1234560');
    insert into fzq values
    ('3','1b3b560');
    insert into fzq values
    ('4','abc');
    insert into fzq values
    ('5','abcde');
    insert into fzq values
    ('6','ADREasx');
    insert into fzq values
    ('7','123 45');
    insert into fzq values
    ('8','adc de');
    insert into fzq values
    ('9','adc,.de');
    insert into fzq values
    ('10','1B');
    insert into fzq values
    ('10','abcbvbnb');
    insert into fzq values
    ('11','11114560');
    insert into fzq values
    ('11','11124560');
    --regexp_like
    --查詢value中以1開頭60結束的記錄并且長度是7位
    select * from fzq where value like '1____60';
    select * from fzq where regexp_like(value,'1....60');
    --查詢value中以1開頭60結束的記錄并且長度是7位并且全部是數字的記錄。
    --使用like就不是很好實現了。
    select * from fzq where regexp_like(value,'1[0-9]{4}60');
    -- 也可以這樣實現,使用字符集。
    select * from fzq where regexp_like(value,'1[[:digit:]]{4}60');
    -- 查詢value中不是純數字的記錄
    select * from fzq where not regexp_like(value,'^[[:digit:]]+$');
    -- 查詢value中不包含任何數字的記錄。
    select * from fzq where regexp_like(value,'^[^[:digit:]]+$');
    --查詢以12或者1b開頭的記錄.不區分大小寫。
    select * from fzq where regexp_like(value,'^1[2b]','i');
    --查詢以12或者1b開頭的記錄.區分大小寫。
    select * from fzq where regexp_like(value,'^1[2B]');
    -- 查詢數據中包含空白的記錄。
    select * from fzq where regexp_like(value,'[[:space:]]');
    --查詢所有包含小寫字母或者數字的記錄。
    select * from fzq where regexp_like(value,'^([a-z]+|[0-9]+)$');
    --查詢任何包含標點符號的記錄。
    select * from fzq where regexp_like(value,'[[:punct:]]');

    例子:判斷姓名是否為空,少于兩個字符,包含數字和字母

    create or replace
    FUNCTION CheckName(NameStr in VARCHAR2) RETURN integer
    As
    BEGIN
    --符合返回1,不符合返回0
       if(NameStr is null or length(NameStr)<2) then
          return 0;
       else
          if(NameStr like '%未取名%') then
           RETURN 0;
           end if;
           if regexp_like(NameStr,'^([a-z]+|[0-9]+|[A-Z]+)$') then
           return 0;
           end if;
           return 1;     
       end if;
    END CheckName;

    posted @ 2012-10-11 17:37 abing 閱讀(276) | 評論 (0)編輯 收藏

    需求:

    匹配手機號,第一位可以是+,可以沒有+,后面的全部要是數字,如:

    +861359415665

    8613659558555

    1356856455

    都是合法的。

    +aa156945555

    aa1359556666

    aaddssdfdfsd

    都是不合法的。

    正則:

    [sql]
    1. SQL> SELECT * FROM DUAL WHERE regexp_like('+333333' ,'^[\+]*[[:digit:]]+');      --該+轉義或者不轉義,結果是一樣的   
    2.   
    3. DUMMY  
    4. -----   
    5. X  

    [sql]

    1. SQL> SELECT * FROM DUAL WHERE regexp_like('aa333333' ,'^[+]*[[:digit:]]+');  
    2.   
    3. DUMMY  
    4. -----  

    解釋:

    1.^代表開始,*表示出現0次或多次,+表示出現1次或多次,[:digit:]代表0-9的純數字(還有$代表以什么結尾,如果是[[:digit:]]+$代表以數字結尾)。該正則的意思就是:

    以+0次或多次開頭,緊接著后面數字出現一次或多次(即一定要有數字)。

    2.dual表中,永遠只有1行記錄。查詢出dual中有記錄,證明where條件成立,反之不成立。

    先前寫了一個錯誤的正則:

    [sql]
    1. [\+]*[[:digit:]]+  

    注意,就只少了一個代表開始符號的^。少了這個符號,說明這個正則的意思是:

    +出現0次或多次(即+可以出現,可以不出現!!),緊后面的數字出現1次或多次。前面已經+可以出現0次了,證明沒有+也可以,那么就是只要字符串中有數字(+aa111a,aass11111……),這個正則恒成立,錯誤深重啊!!

    Oracle正則表達式的應用by 溫州--名次

    在oracle里正則表達式有四個函數可用,分別是regexp_like、regexp_substr、regexp_instr 和regexp_replace。這里在我們oracle 10g里靈活應用。

           先來簡單介紹一下正則表達式的內容,正則表達式是做為快速查詢的文本內容的,在linux應用比較多,首先,行的起始與結束 “^”這個字符是表示只查找行首的內容。“$”這個字符只查找行末的內容。接下來是“^”還可以做為一個排除字符來使用。還是使用例子來做一個演示比較明了一下。

           這里我使用regexp_like這個函數來做,這樣可以我們平時會使用的比較多。

    select * from test_table

    where regexp_like(field_1,'^1234')

    這個就是表示是以1234打頭的字符串是不是有匹配的。這里和like的方式是一樣的。

     

     

    select * from test_table

    where regexp_like(field_1,'^[12]234')

    這里多了一個[]這里做一個獨立字符,這里表示是以1或2開始,并且接著是234這個里的字符就會是匹配的。

     

     

    select * from test_table

    where regexp_like(field_1,'^(歐陽|李)小二')

    這里我們就可以表達,這個查詢一個姓是歐陽或李的,名字叫小二的字符串。這里多了一個()這個是做一個為字符串的方式來寫的與[]剛好是對應。

    這里還有一個“|”來表示或的意思。

     

     

    select * from test_table

    where regexp_like(field_1,'^李[小]*二')

    這里我們就可以查詢李小二或是李二,再或者是李小小二,都可以,這里我們需要講一下是[]后面帶了一個*,這個是表示0~無窮大 字符去匹配。這個[]我們還可以添加一個“+”來表示1~無窮大的字符去匹配,也可以更加精準一些,在[]后面{1,3}這里就是表示1個到3個相同字符的匹配。還有一個“?”來說表示1或是0個。

     

     

    select * from test_table

    where regexp_like(field_1,'李[^小]二')

    這里我們可以查詢到姓李的,但是第二字不是“小”這個字。

     

     

    select * from test_table

    where regexp_like(field_1,'[0-9]')

    這里是表示我們查詢字符串含有0-9的數字的字符串。

     

     

    select * from test_table

    where regexp_like(field_1,'[a-z]')

    這里是表示我們查詢字符串含有a-z的小寫字母的字符串。

     

     

    select * from test_table

    where regexp_like(field_1,'[A-z]')

    這里是表示我們查詢字符串含有A-z的所有字母的字符串。

     

     

    select * from test_table

    where regexp_like(name,'[[:alpha:]]')

    這里是表示查詢匹配任意字母,也包括中文字

     

     

    select * from test_table

    where regexp_like(name,'[[:alnum:]]')

    這里是表示查詢匹配任意字母和數字

     

     

    select * from test_table

    where regexp_like(name,'[[:digit:]]')

    這里是表示查詢匹配任意數字

     

     

    Select * from test_table

    Where regexp_like(name,’of’,’i’)

    這里就是of不區分大小寫

     

     

    Select * from test_table

    Where regexp_like(name,’^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$’)

    這樣我們可以查詢是不是ip格式

     

     

     

    接下來介紹一下regexp_substr

    這個也是一個非常實用的一個函數

     

     REGEXP_SUBSTR與SUBSTR函數相同,返回截取的子字符串

    REGEXP_SUBSTR(srcstr, pattern [, position [, occurrence [, match_option]]])

    注:

    srcstr 源字符串

    pattern 正則表達式樣式

    position 開始匹配字符位置

    occurrence 匹配出現次數

    match_option 匹配選項(區分大小寫)

     

     

    SELECT regexp_substr('1PSN/231_3253/ABc', '[[:alnum:]]+') FROM dual;

    Output: 1PSN

    [[:alnum:]]+ 表示匹配1個或者多個字母或數字字符

     

     

    SELECT regexp_substr('1PSN/231_3253/ABc', '[[:alnum:]]+', 1, 2) FROM dual;

    Output: 231

    與上面一個例子相比,多了兩個參數

    1 表示從源字符串的第一個字符開始查找匹配

    2 表示第2次匹配到的字符串(默認值是“1”,如上例)

     

     

    select regexp_substr('@@/231_3253/ABc','@*[[:alnum:]]+') from dual;

    Output: 231

    @* 表示匹配0個或者多個@

    [[:alnum:]]+ 表示匹配1個或者多個字母或數字字符

    注意:需要區別“+”和“*”的區別

     

     

    select regexp_substr('1@/231_3253/ABc','@+[[:alnum:]]*') from dual;

    Output: @

    @+ 表示匹配1個或者多個@

    [[:alnum:]]* 表示匹配0個或者多個字母或數字字符

     

     

    select regexp_substr('1@/231_3253/ABc','@+[[:alnum:]]+') from dual;

    Output: Null

    @+ 表示匹配1個或者多個@

    [[:alnum:]]+ 表示匹配1個或者多個字母或數字字符

     

     

    select regexp_substr('@1PSN/231_3253/ABc125','[[:digit:]]+$') from dual;

    Output: 125

    [[:digit:]]+$ 表示匹配1個或者多個數字結尾的字符

     

     

    select regexp_substr('1@/231_3253/ABc','@+[[:alnum:]]+') from dual;

    Output: Null

    @+ 表示匹配1個或者多個@

    [[:alnum:]]+ 表示匹配1個或者多個字母或數字字符

     

     

    select regexp_substr('@1PSN/231_3253/ABc125','[[:digit:]]+$') from dual;

    Output: 125

    [[:digit:]]+$ 表示匹配1個或者多個數字結尾的字符

     

     

    select regexp_substr('@1PSN/231_3253/ABc','[^[:digit:]]+$') from dual;

    Output: /ABc

    [^[:digit:]]+$ 表示匹配1個或者多個不是數字結尾的字符

     

     

    select regexp_substr('Tom_Kyte@oracle.com','[^@]+') from dual;

    Output: Tom_Kyte

    [^@]+ 表示匹配1個或者多個不是“@”的字符

     

     

    select regexp_substr('1PSN/231_3253/ABc','[[:alnum:]]*',1,2)

    from dual;

    Output: Null

    [[:alnum:]]* 表示匹配0個或者多個字母或者數字字符

    注:因為是匹配0個或者多個,所以這里第2次匹配的是“/”(匹配了0次),而不是“231”,所以結果是“Null”

     

     

    這里我們有時候會查詢字符串里asdfafd<main>dafda 這里我們要取出<main>這個字符串

    Select regexp_substr('asdfafd<main>dafda','<[^>]+>') from dual

    Output: <main>

    這里我們在<>中間去一個^>這樣在匹配<之后,在向后查詢的時候確保在匹配到>之前不再在有>,不然的話就要有可以出錯的情況。

     

     

    Select regexp_substr('asdfafd<main>da>fda','<[^<]+>') from dual

    Output: <main>da>

    在這個例子中,我們在<main>之后還在da>,這樣的話,如果我們沒有添加^>,正則表達式就會向后繼續去匹配,直到最后一個>為至,這樣就會出現偏差

     

     

    這個通常用來實現字符串的列傳行

    select regexp_substr('123;234;345;456;567;678;789','[^;]+',1,rownum) from dual

    connect by rownum <= length('123;234;345;456;567;678;789') - length(replace('123;234;345;456;567;678;789',';'))+1

    這里length這里操作是先得到有多少個“;”,再通過 connect by rownum方式來做一行成多行的操作,在變成多行之后,可以通過regexp_substr來取字符串的操作

     

     

    接著上一個例子

    a,b,c,d,e,d,f,a,n這樣的一個字符串,我們現在要把字符串里一些重復去掉,這樣的話結果是a,b,c,d,e,f,n去掉了d與a的兩個字符串

    select wm_concat(new_row) from (

    select distinct regexp_substr('a,b,c,d,e,d,f,a,n','[^,]+',1,rownum) new_row from dual

    connect by rownum<=length('a,b,c,d,e,d,f,a,n')-length(replace('a,b,c,d,e,d,f,a,n',',')))

    通過轉成多行的,再用distinct 去掉重復,然后我們再通過wm_concat來字符串合并來完成。

     

     

    再來一個ip格式轉換的例子吧,我們一般的IP的格式是12.19.168.27現在要不足3位的補足前面為0,結果是012.019.168.027

    select wm_concat(new_value) from (

    select

    lpad(regexp_substr('12.19.168.27','[^.]+',1,rownum) ,3,'0') new_value,rownum

    from dual

    connect by rownum<5

    order by rownum)

     

     

    來一個驗證IP是數字是否正確

    select count(*) from(

    select

    lpad(regexp_substr('12.19.168.27','[^.]+',1,rownum) ,3,'0') new_value,rownum

    from dual

    connect by rownum<5)

    where new_value>=0 and new_value<256

    having count(*) =4

     

     

    來一個IP字符串格式轉換成數字型IP

    select sum(new_value*power(256,4-rm)) from (

    select regexp_substr('12.19.168.27','[^.]+',1,rownum) new_value,rownum rm from dual

    connect by rownum<=4

    )

     

     

    接下來介紹一個regexp_instr函數

     

    REGEXP_INSTR 函數使用正則表達式返回搜索模式的起點和終點。REGEXP_INSTR 的語法如下所示。REGEXP_INSTR 返回一個整數,指出搜索模式的開始或結束的位置,如果沒有發現匹配的值,則返回0。

     

    語法:

    2.REGEXP_INSTR與INSTR函數相同,返回字符串位置

    REGEXP_INSTR(srcstr, pattern [, position [, occurrence [, return_option [,match_option]]]])

    與REGEXP_SUBSTR一樣,它也有變量pattern、position(開始位置)、occurrence 和match_parameter;這里主要介紹一下新參數return_option 的作用,它允許用戶告訴Oracle,模式出現的時候,要返回什么內容。

     

    Select regexp_instr('asdfafd<main>da>fda','sd') from dual

    Output:2

    這里去查詢sd的位置,這個和instr是在相同的

     

     

    Select regexp_instr('asdfafd<main>da>fda','da',1,2) from dual

    這里是查詢da第二出現的位置

     

    還有我們經常會遇到一種情況是,查詢某個字段,如果是等于“上海”或“北京”或者我們溫州就寫成大城市,其它的寫成小城市,我們一般會考慮使用decode這種方式

     

    Select decode('上海','上海','大城市','北京' ,'大城市' ,'溫州' ,'大城市','小城市') from dual

    只有兩個我們可能覺的sql也不是很冗長,如果有四五個的話,就有點長了,這里使用regexp_instr就可以很多的去操作

     

    Select decode (regexp_instr('北京','^(上海|北京|溫州)'),0,'小城市', '大城市') from dual

    通過regexp_instr不匹配時為0的條件,這樣就可以完成了

     

     

     

    最后一個函數regexp_replace

    REGEXP_REPLACE 函數是用另外一個值來替代串中的某個值。例如,可以用一個匹配數字來替代字母的每一次出現。REGEXP_REPLACE的格式如下所示

     

    語法:

    4.REGEXP_REPLACE與REPLACE函數相同,替換原字符串中的字符內容

    REGEXP_REPLACE(srcstr, pattern [,replacestr [, position [, occurrence [,match_option]]]])

     

     

    這個替換函數還是一個非常好用的。

    如我們在有一個字符串adfadfa (main) next 現在我們要把()替換成<>,這里我們可能想用replace就可以搞定了,但是我們現在做的是(之后必須有)這樣的()我們才替換把<>.

    select regexp_replace('adfadfa (main) next ','(\()([^\)]*)(\))','<\2>') from dual

    output: adfadfa <main> next

    這里還是一個\做為轉義字符。

     

    再來一個ip格式轉換的例子吧,我們一般的IP的格式是12.19.168.27現在要不足3位的補足前面為0,結果是012.019.168.027

    select regexp_replace(

    regexp_replace('12.19.168.27','([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})',

    '00\1.00\2.00\3.00\4') ,

    '([0-9]*)([0-9]{3}\.)([0-9]*)([0-9]{3}\.)([0-9]*)([0-9]{3}\.)([0-9]*)([0-9]{3}$)','\2\4\6\8')

    from dual

    output: 012.019.168.027

    這里我分成兩步來操作,regexp_replace('12.19.168.27','([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})',

    '00\1.00\2.00\3.00\4')我首先讓每個小字符串做添加0,這樣每個字符串都會大于3,再

    '([0-9]*)([0-9]{3}\.)([0-9]*)([0-9]{3}\.)([0-9]*)([0-9]{3}\.)([0-9]*)([0-9]{3}$)','\2\4\6\8')

    這整個字符串分成8段,這樣我們只要2、4、6、8這四個段就可以了。

     

     

    下面一個例子中,在每兩個字符之間插入一個空格符

    SELECT regexp_replace('YAHOO', '(.)', '\1 ') AS output FROM dual;

    Output: Y A H O O

    這個用一個循環的方式去操作,還蠻好的。

     

     

    select regexp_replace(

    regexp_replace('12.19.168.27','([^.]+)'

    ,'00\1')

    ,'([^.]*)([^.]{3})','\2')

    from dual

    接著剛才那個,我們可以把replace循環替換的方式來操作。

    posted @ 2012-10-11 17:09 abing 閱讀(384) | 評論 (0)編輯 收藏

    正則表達式,給我寫個1,2,3,4 或者4,1,2,3   匹配出4 來 
    select regexp_substr('1,2,3,4','[4]') tony from dual;
    select regexp_substr('4,3,2,1','[4]') tony from dual;
    oracle  驗證電話號碼(手機號碼):

    /**
     * 手機號碼
     * 移動:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188
     * 聯通:130,131,132,152,155,156,185,186
     * 電信:133,1349,153,180,189
     */
    select t.* from myregex t where regexp_like(t.name,'^1(3[0-9]|5[0-35-9]|8[025-9])[0-9]{8}$')
    select t.* from myregex t where regexp_like(t.name,'^1(3[0-9]|5[0-35-9]|8[025-9])?[0-9]{8}?$')
    select t.* from myregex t where regexp_like(t.name,'^1(3[[:digit:]]|5[0-35-9]|8[025-9])?[[:digit:]]{8}?$')
    /**
     * 中國移動:China Mobile
     * 134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188
     */
    select t.* from myregex t where regexp_like(t.name,'^1(34[0-8]?|3[5-9]?|5[017-9]?|8[278]?)[0-9]{8}$')
    select t.* from myregex t where regexp_like(t.name,'^1(34[0-8]?|3[5-9]?|5[017-9]?|8[278]?)[[:digit:]]{8}$')
    /**
     * 中國聯通:China Unicom
     * 130,131,132,152,155,156,185,186
     */
    select t.* from myregex t where regexp_like(t.name,'^1(3[0-2]?|5[25-6]?|8[5-6]?)[0-9]{8}$')
    select t.* from myregex t where regexp_like(t.name,'^1(3[0-2]?|5[25-6]?|8[5-6]?)[[:digit:]]{8}$')
    /**
     * 中國電信:China Telecom
     * 133,1349,153,180,189
     */
    select t.* from myregex t where regexp_like(t.name,'^1((33?|53?|8[09]?)[0-9]?|349)[0-9]{7}$')
    select t.* from myregex t where regexp_like(t.name,'^1((33?|53?|8[09]?)[0-9]?|349)[[:digit:]]{7}$')


    posted @ 2012-10-11 17:03 abing 閱讀(218) | 評論 (0)編輯 收藏

    NULL指的是空值,或者非法值。
    NVL (expr1, expr2)->expr1為NULL,返回expr2;不為NULL,返回expr1。注意兩者的類型要一致
    NVL2 (expr1, expr2, expr3) ->expr1不為NULL,返回expr2;為NULL,返回expr3。expr2和expr3類型不同的話,expr3會轉換為expr2的類型
    select t.empno,nvl2(t.mgr,'the value is not null','the value is null') from emp t where t.deptno in (select s.deptno from dept s where s.deptno='1')
    NULLIF (expr1, expr2) ->相等返回NULL,不等返回expr1
    select t.empno,nullif(t.mgr,'tom') from emp t where t.deptno in (select s.deptno from dept s where s.deptno='1')
    posted @ 2012-10-11 13:58 abing 閱讀(233) | 評論 (0)編輯 收藏

    select t.empno,nvl(t.mgr,'MGR') from emp t where t.deptno in (select s.deptno from dept s where s.deptno='1')
    select t.empno,nvl(t.mgr,'MGR') from emp t where exists (select s.deptno from emp s where s.deptno='1' and t.deptno=s.deptno)
    select t.empno,nvl(t.mgr,'MGR') from emp t where t.deptno is not null and exists (select s.deptno from emp s where s.deptno='1' and t.deptno=s.deptno)
    select t.empno,nvl(t.mgr,'MGR') from emp t where not exists (select s.* from dept s where s.deptno  in(2,3) and t.deptno=s.deptno)
    select t.empno,nvl(t.mgr,'MGR') from emp t where t.deptno in (select s.deptno from dept s where s.deptno not in(2,3))































    posted @ 2012-10-11 13:31 abing 閱讀(188) | 評論 (0)編輯 收藏

    package com.abin.lee.servlet.regex;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    public class RegexTest {
    public static boolean isRight(String validate){
    String regex="/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/";//郵箱正則1
    // String regex="(^[\\w]*@[a-zA-Z]+[.][a-zA-Z]+$)";//郵箱正則1
    // String regex="(^13[0-9]{9}$)|(^15[0-9]{9}$)|(^18[0-9]{9}$)";//電話號碼正則
    Pattern pattern=Pattern.compile(regex);
    Matcher matcher=pattern.matcher(validate);
    boolean flag=matcher.matches();
    return flag;
    }
    public static void main(String[] args) {
    String validate="varyall@tom.com";
    boolean flag=isRight(validate);
    System.out.println("flag="+flag);
    }
    }
    posted @ 2012-10-10 00:22 abing 閱讀(205) | 評論 (0)編輯 收藏

    僅列出標題
    共7頁: 上一頁 1 2 3 4 5 6 7 下一頁 
    主站蜘蛛池模板: 国产精品亚洲玖玖玖在线观看| 免费三级毛片电影片| 2048亚洲精品国产| 人人公开免费超级碰碰碰视频| 日本人护士免费xxxx视频| 亚洲色偷偷综合亚洲AV伊人蜜桃 | 韩国免费三片在线视频| 亚洲人和日本人jizz| 毛片免费观看的视频| 在线aⅴ亚洲中文字幕| 在线观着免费观看国产黄| 亚洲av无码专区国产不乱码| 免费日本黄色网址| 精品免费久久久久国产一区| 国产l精品国产亚洲区在线观看| 日本免费污片中国特一级| 亚洲国产成+人+综合| 午夜一级免费视频| 一级做a爰片久久免费| 久久亚洲国产视频| 免费看国产精品3a黄的视频| 黄网站色成年片大免费高清| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 亚洲麻豆精品国偷自产在线91| 久久免费国产精品| 精品亚洲成a人片在线观看| 成人毛片视频免费网站观看| 国产亚洲福利一区二区免费看| 亚洲无码在线播放| 99精品国产免费久久久久久下载| 亚洲国产成人AV网站| 亚洲韩国精品无码一区二区三区 | 久久久久亚洲av毛片大| 国产白丝无码免费视频| 亚洲中文字幕无码中文| 色噜噜亚洲精品中文字幕| 7723日本高清完整版免费| 人禽伦免费交视频播放| 亚洲特级aaaaaa毛片| 亚洲黄片手机免费观看| 亚欧免费视频一区二区三区|