sql >> データベース >  >> RDS >> Oracle

Oracleで4バイトのUTF8文字を検出する方法

    正規表現の構築で何か問題があった可能性があります:短い例があります。

    -- create table: 
    create table tmp_a as 
    select unistr('\D841\DF0E') col from dual;
    insert into tmp_a(col)
    values(UNISTR('\D800\DC00'));
    insert into tmp_a(col)
    values(UNISTR('\D800\DC01'));
    insert into tmp_a(col)
    values(UNISTR('\D803\DC03'));
    insert into tmp_a(col)
    values(UNISTR('\041f'));
    insert into tmp_a(col)
    values('a');
    insert into tmp_a(col)
    values('b');
    
    
    -- then check. There is should be 7 rows and only 4 should pass then "check"
    select col, dump(col) , regexp_instr(col, '['||UNISTR('\F090\8080')||'-'||UNISTR('\F48F\BFBF')||']') as check from  tmp_a ;
    
    
    -- finaly we could build next query with regexp_like as in your example 
    select count(*) 
      from tmp_a 
     where regexp_like(col, '['||UNISTR('\F090\8080')||'-'||UNISTR('\F48F\BFBF')||']')
    

    Oracle11.2.0.4および12.2.0.1で動作します



    1. パスワードにsqlplusと特殊文字を含むシェルスクリプト

    2. jQueryリモートメソッドの使用を検証して、ユーザー名がすでに存在するかどうかを確認します

    3. GROUPBYおよびHAVING句を使用したoraclesqlselect構文

    4. CTEが複雑で強力なクエリの作成をどのように支援できるか:パフォーマンスの観点