+3

Postgresql - Tìm kiếm tiếng việt không dấu

Một ngày đẹp trời bạn cần so sánh, tìm kiếm chuỗi có dấu và chuỗi không dấu với Database Postgresql có dữ liệu là tiếng Việt. Bài viết này tôi sẽ hướng dẫn 2 cách để convert tiếng Việt có dấu thành không dấu trong Postgresql.

1. Cách đầu tiên là viết 1 function convert thủ công để replace

Với cách này, sẽ giúp bạn hình dung cơ chế convert tiếng Việt có dấu thành không dấu như thế nào. Khi bạn muốn convert language này sang language khác cũng có thể làm như này. Ngoài ra, nó còn giúp ta maintance tốt hơn, chủ động hơn. Nhược điểm của nó là tốc độ có thể chậm hơn so với cách thứ 2

CREATE OR REPLACE FUNCTION convertTVkdau (x text) RETURNS text AS
$$
DECLARE
       codau text; kdau text; r text;
BEGIN
       codau = 'áàảãạâấầẩẫậăắằẳẵặđéèẻẽẹêếềểễệíìỉĩịóòỏõọôốồổỗộơớờởỡợúùủũụưứừửữựýỳỷỹỵÁÀẢÃẠÂẤẦẨẪẬĂẮẰẲẴẶĐÉÈẺẼẸÊẾỀỂỄỆÍÌỈĨỊÓÒỎÕỌÔỐỒỔỖỘƠỚỜỞỠỢÚÙỦŨỤƯỨỪỬỮỰÝỲỶỸỴ';
       kdau = 'aaaaaaaaaaaaaaaaadeeeeeeeeeeeiiiiiooooooooooooooooouuuuuuuuuuuyyyyyAAAAAAAAAAAAAAAAADEEEEEEEEEEEIIIIIOOOOOOOOOOOOOOOOOUUUUUUUUUUUYYYYY';
       r = x;
       FOR i IN 0..length(codau)
       LOOP 
                 r = replace(r,substr(codau,i,1), substr(kdau,i,1));
       END LOOP;
       RETURN r;
END;
$$ LANGUAGE plpgsql;

Sau đó, ta sẽ áp dụng function trên với câu lệnh select sau:

SELECT converttvkdau('Hàm convert tiếng việt có dấu');

Thì sẽ nhận được kết quả:

Ham convert tieng viet co dau

2. Cách thứ hai là dùng hàm có sẵn được hỗ trợ Unaccent

Trước hết để sử dụng được hàm Unaccent này cần tạo Extension

CREATE EXTENSION unaccent;
SELECT unaccent('Hàm convert tiếng việt có dấu')

All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.