From a2dbd0e24a30b945a5d641ed773dc44f5e6b50c1 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Wed, 15 Dec 2021 11:02:59 +0100 Subject: [PATCH] doc: More documentation on regular expressions and SQL standard --- doc/src/sgml/func.sgml | 91 +++++++++++++++++++++++++--- src/backend/catalog/sql_features.txt | 10 +-- 2 files changed, 88 insertions(+), 13 deletions(-) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 5801299b27..e58efce586 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -7353,10 +7353,26 @@ Basic Regular Expressions - Differences from XQuery (<literal>LIKE_REGEX</literal>) + Differences from SQL Standard and XQuery - LIKE_REGEX + LIKE_REGEX + + + + OCCURRENCES_REGEX + + + + POSITION_REGEX + + + + SUBSTRING_REGEX + + + + TRANSLATE_REGEX @@ -7364,16 +7380,75 @@ Differences from XQuery (<literal>LIKE_REGEX</literal>) - Since SQL:2008, the SQL standard includes - a LIKE_REGEX operator that performs pattern + Since SQL:2008, the SQL standard includes regular expression operators + and functions that performs pattern matching according to the XQuery regular expression - standard. PostgreSQL does not yet - implement this operator, but you can get very similar behavior using - the regexp_match() function, since XQuery - regular expressions are quite close to the ARE syntax described above. + standard: + + LIKE_REGEX + OCCURRENCES_REGEX + POSITION_REGEX + SUBSTRING_REGEX + TRANSLATE_REGEX + + PostgreSQL does not currently implement these + operators and functions. You can get approximately equivalent + functionality in each case as shown in . (Various optional clauses on + both sides have been omitted in this table.) + + + + Regular Expression Functions Equivalencies + + + + + SQL standard + PostgreSQL + + + + + + string LIKE_REGEX pattern + regexp_like(string, pattern) or string ~ pattern + + + + OCCURRENCES_REGEX(pattern IN string + regexp_count(string, pattern) + + + + POSITION_REGEX(pattern IN string + regexp_instr(string, pattern) + + + + SUBSTRING_REGEX(pattern IN string + regexp_substr(string, pattern) + + + + TRANSLATE_REGEX(pattern IN string WITH replacement + regexp_replace(string, pattern, replacement) + + + +
+ + + Regular expression functions similar to those provided by PostgreSQL are + also available in a number of other SQL implementations, whereas the + SQL-standard functions are not as widely implemented. Some of the + details of the regular expression syntax will likely differ in each + implementation. + The SQL-standard operators and functions use XQuery regular expressions, + which are quite close to the ARE syntax described above. Notable differences between the existing POSIX-based regular-expression feature and XQuery regular expressions include: diff --git a/src/backend/catalog/sql_features.txt b/src/backend/catalog/sql_features.txt index 9f424216e2..b8a78f4d41 100644 --- a/src/backend/catalog/sql_features.txt +++ b/src/backend/catalog/sql_features.txt @@ -323,11 +323,11 @@ F821 Local table references NO F831 Full cursor update NO F831 Full cursor update 01 Updatable scrollable cursors NO F831 Full cursor update 02 Updatable ordered cursors NO -F841 LIKE_REGEX predicate NO -F842 OCCURRENCES_REGEX function NO -F843 POSITION_REGEX function NO -F844 SUBSTRING_REGEX function NO -F845 TRANSLATE_REGEX function NO +F841 LIKE_REGEX predicate NO consider regexp_like() +F842 OCCURRENCES_REGEX function NO consider regexp_matches() +F843 POSITION_REGEX function NO consider regexp_instr() +F844 SUBSTRING_REGEX function NO consider regexp_substr() +F845 TRANSLATE_REGEX function NO consider regexp_replace() F846 Octet support in regular expression operators NO F847 Nonconstant regular expressions NO F850 Top-level in YES -- 2.34.1