sql >> Database teknologi >  >> RDS >> Oracle

Forespørgsel med jokertegn og prik, der ikke matcher data med Oracle Text-indeks

Dette er fordi din standard lexer behandler punktum som en ordadskiller.

Indledende opsætning:

create table my_table(item_number varchar2(50 byte) not null);

insert into my_table values ('1234.1234');

create index my_index on my_table (item_number) 
indextype is ctxsys.context;

Dette får den adfærd, du ser:

SELECT * FROM MY_TABLE
WHERE CONTAINS(ITEM_NUMBER, '%1234') > 0;

--------------------------------------------------
1234.1234

SELECT * FROM MY_TABLE
WHERE CONTAINS(ITEM_NUMBER, '%.1234') > 0;

no rows selected

Hvis du tilføjer en lexer, der definerer PRINTJOINS for at inkludere perioden:

drop index my_index;

begin 
  ctx_ddl.create_preference('my_lexer', 'BASIC_LEXER'); 
  ctx_ddl.set_attribute('my_lexer', 'PRINTJOINS', '.');
end;
/

create index my_index on my_table (item_number) 
indextype is ctxsys.context
parameters ('lexer my_lexer');

så opfører det sig som du vil:

SELECT * FROM MY_TABLE
WHERE CONTAINS(ITEM_NUMBER, '%.1234') > 0;

ITEM_NUMBER
--------------------------------------------------
1234.1234

Læs mere om tekstindekseringselementer .



  1. NUMTODSINTERVAL i PostgreSQL

  2. MySQL:hvordan fjerner man alle enkelttegn fra en streng?

  3. Strenger automatisk objekt ved indsættelse i en MySQL JSON-kolonne med knex

  4. Matlab og MySQL fandt ingen passende driver