Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak wykryć 4-bajtowe znaki UTF8 w Oracle?

Być może zrobiłeś coś złego z budowaniem wyrażeń regularnych:Jest krótki przykład.

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

Działa na Oracle 11.2.0.4 i 12.2.0.1



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja wywoływania VBA przez VBA i ADO

  2. Żądanie ustawione w menedżerze współbieżnym

  3. Oracle PIVOT, dwa razy?

  4. Jak zadeklarować zmienną i użyć jej w tym samym skrypcie Oracle SQL?

  5. WYROCZNIA. Uwierzytelnianie z LDAP zawsze zwraca -16