sql >> Database >  >> RDS >> Oracle

Hoe 4byte UTF8-tekens in Oracle te detecteren

Misschien heb je iets verkeerd gedaan met het bouwen van een regexp:er is een kort voorbeeld.

-- 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')||']')

Het werkt op Oracle 11.2.0.4 en 12.2.0.1



  1. 42809 Fout bij het uitvoeren van de PostgreSQL-opgeslagen procedure vanuit de Asp.Net C#-toepassing

  2. Oracle - ORA-06502:PL/SQL:numerieke of waardefout (DBMS_OUTPUT)

  3. Wat is de beste manier om een ​​json-string te coderen/decoderen?

  4. Noodzaak om lege ruimte in orakel in te korten