PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak stworzyć n-gram w postgresql

Wypróbuj tę funkcję.

CREATE OR REPLACE FUNCTION myngram(mystr TEXT, n INT) RETURNS TEXT[]
AS $$
DECLARE
str VARCHAR;
arr TEXT[];
BEGIN

  str := lpad(mystr, n - 1 + char_length(mystr), ' ');
  str := rpad(str, n - 1 + char_length(str), ' ');

  arr := array[]::TEXT[];
  FOR i IN 1 .. char_length(str) - n + 1 LOOP
    arr := arr || substring(str from i for n);
  END LOOP;
  RETURN arr;
END
$$
LANGUAGE plpgsql;

Wyniki moich testów.

testdb=# SELECT myngram('abcpqrs', 4);
                             myngram                             
-----------------------------------------------------------------
 {"   a","  ab"," abc",abcp,bcpq,cpqr,pqrs,"qrs ","rs  ","s   "}
(1 row)

testdb=# SELECT myngram('abcpqrs', 5);
                                       myngram                                       
-------------------------------------------------------------------------------------
 {"    a","   ab","  abc"," abcp",abcpq,bcpqr,cpqrs,"pqrs ","qrs  ","rs   ","s    "}
(1 row)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak oznaczyć grupy w postgresql, gdy przynależność do grupy zależy od poprzedniego wiersza?

  2. Jak działa funkcja Floor() w PostgreSQL

  3. Moje ulubione rozszerzenia PostgreSQL — część druga

  4. Przyspiesz test zakresu dla wartości kluczy zagnieżdżonych w tablicy obiektów jsonb

  5. pakiet wywołań funkcji postgreSQL