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

Jak uzyskać pozycję dopasowania regexp w ciągu w PostgreSQL?

Jeden sposób (z wielu), aby to zrobić:Usuń resztę ciągu rozpoczynającego się od dopasowania i zmierz długość skróconego ciągu:

SELECT id, title
FROM   book
WHERE  title ILIKE '%deep%space%'
ORDER  BY length(regexp_replace(title, 'deep.*space.*', '','i'));

Korzystanie z ILIKE w klauzuli WHERE, ponieważ jest to zwykle szybsze (i robi to samo tutaj).
Zwróć także uwagę na czwarty parametr regexp_replace() funkcja ('i' ), aby wielkość liter nie była rozróżniana.

Alternatywne

Zgodnie z prośbą w komentarzu.
Jednocześnie demonstrując, jak sortować dopasowania najpierw (i NULLS LAST ).

SELECT id, title
      ,substring(title FROM '(?i)(^.*)deep.*space.*') AS sub1
      ,length(substring(title FROM '(?i)(^.*)deep.*space.*')) AS pos1

      ,substring(title FROM '(?i)^.*(?=deep.*space.*)') AS sub2
      ,length(substring(title FROM '(?i)^.*(?=deep.*space.*)')) AS pos2

      ,substring(title FROM '(?i)^.*(deep.*space.*)') AS sub3
      ,position((substring(title FROM '(?i)^.*(deep.*space.*)')) IN title) AS p3

      ,regexp_replace(title, 'deep.*space.*', '','i') AS reg4
      ,length(regexp_replace(title, 'deep.*space.*', '','i')) AS pos4
FROM   book
ORDER  BY title ILIKE '%deep%space%' DESC NULLS LAST
         ,length(regexp_replace(title, 'deep.*space.*', '','i'));

Dokumentację wszystkich powyższych informacji znajdziesz w instrukcji tutaj i tutaj .

-> SQLfiddle demonstrując wszystko.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hibernacja + PostgreSQL + Typ adresu sieciowego (inet, cdir)

  2. PostgreSQL generate_series() z funkcją SQL jako argumentami

  3. Concat wiersze w Postgres

  4. Używanie CASE w PostgreSQL do jednoczesnego wpływania na wiele kolumn

  5. Python psycopg2 copy_from() do ładowania danych wyrzuca błąd dla pustych wartości całkowitych:DataError:nieprawidłowa składnia wejściowa dla liczby całkowitej: