diff options
author | Peter Eisentraut <peter@eisentraut.org> | 2020-06-29 11:04:42 +0200 |
---|---|---|
committer | Peter Eisentraut <peter@eisentraut.org> | 2020-06-29 11:05:00 +0200 |
commit | 78c887679d7632c1211f85eb95723f3226bf1b46 (patch) | |
tree | 7c333d0f5f4c6238ea74bc44038564a179882107 /doc/src | |
parent | aafefb4dcbf79e8cb1439e888a9cdb3dfefa7657 (diff) | |
download | postgresql-78c887679d7632c1211f85eb95723f3226bf1b46.tar.gz postgresql-78c887679d7632c1211f85eb95723f3226bf1b46.zip |
Add current substring regular expression syntax
SQL:1999 had syntax
SUBSTRING(text FROM pattern FOR escapechar)
but this was replaced in SQL:2003 by the more clear
SUBSTRING(text SIMILAR pattern ESCAPE escapechar)
but this was never implemented in PostgreSQL. This patch adds that
new syntax as an alternative in the parser, and updates documentation
and tests to indicate that this is the preferred alternative now.
Reviewed-by: Pavel Stehule <pavel.stehule@gmail.com>
Reviewed-by: Vik Fearing <vik@postgresfriends.org>
Reviewed-by: Fabien COELHO <coelho@cri.ensmp.fr>
Discussion: https://www.postgresql.org/message-id/flat/a15db31c-d0f8-8ce0-9039-578a31758adb%402ndquadrant.com
Diffstat (limited to 'doc/src')
-rw-r--r-- | doc/src/sgml/func.sgml | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 7119f0b2ca5..f0658565350 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -2669,15 +2669,21 @@ repeat('Pg', 4) <returnvalue>PgPgPgPg</returnvalue> <row> <entry role="func_table_entry"><para role="func_signature"> + <function>substring</function> ( <parameter>string</parameter> <type>text</type> <literal>SIMILAR</literal> <parameter>pattern</parameter> <type>text</type> <literal>ESCAPE</literal> <parameter>escape</parameter> <type>text</type> ) + <returnvalue>text</returnvalue> + </para> + <para role="func_signature"> <function>substring</function> ( <parameter>string</parameter> <type>text</type> <literal>FROM</literal> <parameter>pattern</parameter> <type>text</type> <literal>FOR</literal> <parameter>escape</parameter> <type>text</type> ) <returnvalue>text</returnvalue> </para> <para> Extracts substring matching <acronym>SQL</acronym> regular expression; - see <xref linkend="functions-similarto-regexp"/>. + see <xref linkend="functions-similarto-regexp"/>. The first form has + been specified since SQL:2003; the second form was only in SQL:1999 + and should be considered obsolete. </para> <para> - <literal>substring('Thomas' from '%#"o_a#"_' for '#')</literal> + <literal>substring('Thomas' similar '%#"o_a#"_' escape '#')</literal> <returnvalue>oma</returnvalue> </para></entry> </row> @@ -5160,7 +5166,11 @@ cast(-44 as bit(12)) <lineannotation>111111010100</lineannotation> The <function>substring</function> function with three parameters provides extraction of a substring that matches an SQL regular expression pattern. The function can be written according - to SQL99 syntax: + to standard SQL syntax: +<synopsis> +substring(<replaceable>string</replaceable> similar <replaceable>pattern</replaceable> escape <replaceable>escape-character</replaceable>) +</synopsis> + or using the now obsolete SQL:1999 syntax: <synopsis> substring(<replaceable>string</replaceable> from <replaceable>pattern</replaceable> for <replaceable>escape-character</replaceable>) </synopsis> @@ -5201,8 +5211,8 @@ substring(<replaceable>string</replaceable>, <replaceable>pattern</replaceable>, <para> Some examples, with <literal>#"</literal> delimiting the return string: <programlisting> -substring('foobar' from '%#"o_b#"%' for '#') <lineannotation>oob</lineannotation> -substring('foobar' from '#"o_b#"%' for '#') <lineannotation>NULL</lineannotation> +substring('foobar' similar '%#"o_b#"%' escape '#') <lineannotation>oob</lineannotation> +substring('foobar' similar '#"o_b#"%' escape '#') <lineannotation>NULL</lineannotation> </programlisting> </para> </sect2> |