本文介绍PostgreSQL Substring函数,用于从字符串中抽取字串。
1. Substring函数语法
该函数返回字符串,语法有多种形式。
1.1 三个参数
SUBSTRING ( string ,start_position , length )
参数解释:
string
可以是 char, varchar, text等数据类型。
start_position
是integer类型,指定从哪开始抽取. 如果等于零,则从第一个字符开始。虽然其他数据库可以为负数,但这里只能是正数。
length
是integer类型,决定从start_position
开始抽取字符串的长度。如果从开始位置到指定长度的总数大于字符串的字符数量,则返回从开始位置的全部字符串。该参数可选,忽略则返回从开始位置的全部字符串。
1.2 单个参数
另外一种语法形式:
substring(string from start_position for length);
这种形式一次性指定三个参数。
1.3 正则表达式
该函数也支持 POSIX 正则表达式,pattern参数指定匹配字符串模式,语法如下:
SUBSTRING(string,pattern);
当然也可以写成带from的单参数形式:
SUBSTRING(string FROM pattern)
如果不匹配返回null,如果pattern包含任何圆括号,substring函数将返回与第一个带圆括号的子表达式的匹配文本。
2. 示例
2.1 SUBSTRING示例
SELECT
SUBSTRING ('PostgreSQL', 1, 8); -- PostgreS
SELECT
SUBSTRING ('PostgreSQL', 8); -- SQL
from形式的示例:
SELECT
SUBSTRING ('PostgreSQL' FROM 1 FOR 8); -- PostgreS
SELECT
SUBSTRING ('PostgreSQL' FROM 8); -- SQL
查询表字段示例:
SELECT
last_name,
SUBSTRING( first_name, 1, 1 ) AS initial
FROM
customer
ORDER BY
last_name;
查询last_name,取first_name的第一个字母。
2.2 正则表达式示例
示例返回9001
:
SELECT SUBSTRING ('The house no. is 9001','([0-9]{1,4})' ) as house_no
顺便说下,字符串比较时也可以直接使用正则表达式。
(~) 大小写敏感方式匹配正则表达式
(~) 大小写不敏感方式匹配正则表达式
(!~) 大小写敏感方式不匹配正则表达式
(!~) 大小写不敏感方式不匹配正则表达式
示例:
‘London’ ~ ‘London.*’
‘London’ ~* ’London.*’
‘London’ !~ ’London.*’
‘London’ !~* ’London.*’
select * from customers c where name ~ 'don'; # 匹配London
3. 总结
本文解释PostgreSql函数SUBSTRING,通过示例学习了多种应用形式。
本文参考链接:https://blog.csdn.net/neweastsun/article/details/112546754