我有一个数据集,其中主键列的格式为“31DXS6070705.OUT”。如何从“31DXS6070705.OUT”中提取“DXS”,请注意,对于某些记录,DXS(提取部分)可能会变为两个字母,也可能保留三个字母。请在 postgresql 查询中回答这个问题。
适用于所有可能性的 PostgreSql 查询。
A
'DXS?([^\.]*)'
正则表达式模式可以工作:
?
中的问号DXS?
使DX
成为必填项,而S
成为可选项。()
告知函数您希望其返回的子表达式。^
中的插入符[^\.]*
使方括号字符类接受除内部文字.
点之外的任何内容。该点通过反斜杠 \
进行转义。否则,未转义的点将匹配任何字符。这意味着它正在寻找后面带有可选 S 的 DX,然后返回之后的所有内容,直到最近的点。 db<>fiddle 的演示:
SELECT regexp_substr('31DXS6070705.OUT','DXS?([^\.]*)',1,1,'',1) AS extracted_part;
提取部分 |
---|
6070705 |
SELECT substring('31DXS6070705.OUT' FROM 'DXS?([^\.]*)') AS extracted_part;
提取部分 |
---|
6070705 |
要从 PostgreSQL 中的字符串“31DXS6070705.OUT”中提取变量部分(“DXS”),可以使用正则表达式和 substring() 函数。这是一个处理提取部分的不同长度的示例查询:
SELECT
substring('31DXS6070705.OUT' FROM '\d+(.*)\.\w+') AS extracted_part;
此查询使用带有正则表达式模式的 substring() 函数来提取字符串的所需部分。模式 \d+(.*).\w+ 匹配开头的数字,后跟任何字符(捕获为一组)、一个点,然后是任何单词字符。
substring() 函数从字符串中提取匹配的组(用(.*)表示),忽略数字和点。这将为您提供输入字符串中所需的变量部分(“DXS”)。
查询结果将是:
extracted_part
-------------
DXS