Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Truy vấn có ký tự đại diện và dấu chấm không khớp với dữ liệu với chỉ mục Văn bản của Oracle

Điều này là do lexer mặc định của bạn đang coi dấu chấm là dấu phân cách từ.

Thiết lập ban đầu:

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;

Điều này có được hành vi mà bạn thấy:

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

Nếu bạn thêm lexer xác định PRINTJOINS bao gồm khoảng thời gian:

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

thì nó sẽ hoạt động theo cách bạn muốn:

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

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

Đọc thêm về các phần tử lập chỉ mục văn bản .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:SQL chọn ngày với dấu thời gian

  2. Trợ giúp truy vấn PL SQL đệ quy

  3. GIỚI HẠN THU SỐ LƯỢNG LỚN đang THỰC HIỆN NGAY LẬP TỨC

  4. Cách chạy các sql khác nhau để lấy dữ liệu theo dữ liệu đầu vào trước đó trong ấm đun nước pentaho

  5. Giá trị từ hàng được chèn cuối cùng trong DB