Francesco Tisiot:如何使用PostgreSQL® SUBSTRING

Francesco Tisiot:如何使用PostgreSQL® SUBSTRING

💡 原文英文,约1000词,阅读约需4分钟。
📝

内容提要

PostgreSQL SUBSTRING函数可以从文本中提取特定的子字符串。可以使用SUBSTRING函数从指定索引或特定单词开始提取子字符串。还可以使用正则表达式提取子字符串。

🔎

延伸解读

SUBSTRING 与 SUBSTR 的等价写法

文章指出,大多数场景下 SUBSTR 可作为 SUBSTRING 的替代,且语法相似。例如 SUBSTRING(mystr FROM 5) 等价于 SUBSTR(mystr, 5) 或 SUBSTRING(mystr, 5);带宽度时 SUBSTRING(mystr FROM 5 FOR 3) 等价于 SUBSTR(mystr, 5, 3)。读者可根据习惯选择,但需注意不同写法在可读性和移植性上的差异。

从特定单词后提取需结合 POSITION

若要从某个单词之后开始提取,需先用 POSITION 定位该单词的起始位置,再将其作为 SUBSTRING 的起点。若只想保留单词之后的内容,还需加上该单词的长度(必要时再加空格)。文章示例中,提取“Pizza”之后的内容时,结果开头会带一个空格,使用时需留意。

正则表达式提取的两种语法

文章展示了 POSIX 正则和 SQL 正则两种方式。POSIX 示例使用 SUBSTRING(mystr FROM 'Pizza.*$') 提取从“Pizza”到结尾的内容;SQL 正则则使用 SIMILAR 和 ESCAPE 子句,如 '%Pizza #"[A-Za-z]*#"%'。作者提醒正则强大但危险,需谨慎定义模式,避免意外匹配。

❓

Q&A

PostgreSQL中SUBSTRING函数可以从哪些类型的文本列提取子字符串?

SUBSTRING函数适用于character、character varying和text类型的文本列。根据文档说明,所有字符串函数都声明为接受和返回text类型,其他类型会被转换为text。

如何从字符串的第5个字符开始提取子字符串?

可以使用SUBSTRING(mystr FROM 5)或等价的SUBSTR(mystr, 5)或SUBSTRING(mystr, 5)语句,从第5个字符开始提取直到字符串末尾。

怎样提取字符串中从第5个字符开始、长度为3的子字符串?

使用SUBSTRING(mystr FROM 5 FOR 3)或等价的SUBSTR(mystr, 5, 3)或SUBSTRING(mystr, 5, 3)语句,从第5个字符开始提取3个字符。

如何提取字符串开头的特定数量的字符?

使用SUBSTRING(mystr FOR 3)或等价的SUBSTR(mystr, 1, 3)或SUBSTRING(mystr, 1, 3)语句,提取字符串的前3个字符。

如何提取某个特定单词之后的所有内容?

可以先使用POSITION函数定位单词的位置,然后结合SUBSTRING函数提取。例如,要提取'Pizza'之后的内容,可以使用SUBSTRING(mystr FROM POSITION('Pizza' IN mystr) + LENGTH('Pizza')),这样会从'Pizza'之后开始提取。

如何使用正则表达式从字符串中提取子字符串?

可以使用POSIX正则表达式,例如SUBSTRING(mystr FROM 'Pizza.*$')会提取从'Pizza'开始到字符串末尾的内容。也可以使用SQL正则表达式,例如SUBSTRING(mystr SIMILAR '%Pizza #"[A-Za-z]*#"%' ESCAPE '#')来提取'Pizza'后的第一个单词。

🏷️

标签

➡️

继续阅读