如何从“31DXS6070705.OUT”中提取“DXS”?

问题描述 投票:0回答:2

我有一个数据集,其中主键列的格式为“31DXS6070705.OUT”。如何从“31DXS6070705.OUT”中提取“DXS”,请注意,对于某些记录,DXS(提取部分)可能会变为两个字母,也可能保留三个字母。请在 postgresql 查询中回答这个问题。

适用于所有可能性的 PostgreSql 查询。

postgresql
2个回答
0
投票

A

'DXS?([^\.]*)'
正则表达式模式可以工作:

  1. ?
    中的问号
    DXS?
    使
    DX
    成为必填项,而
    S
    成为可选项。
  2. 括号
    ()
    告知函数您希望其返回的子表达式。
  3. ^
    中的插入符
    [^\.]*
    使方括号字符类接受除内部文字
    .
    点之外的任何内容。该点通过反斜杠
    \
    进行转义。否则,未转义的点将匹配任何字符。

这意味着它正在寻找后面带有可选 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

-1
投票

要从 PostgreSQL 中的字符串“31DXS6070705.OUT”中提取变量部分(“DXS”),可以使用正则表达式和 substring() 函数。这是一个处理提取部分的不同长度的示例查询:

SELECT 
  substring('31DXS6070705.OUT' FROM '\d+(.*)\.\w+') AS extracted_part;

此查询使用带有正则表达式模式的 substring() 函数来提取字符串的所需部分。模式 \d+(.*).\w+ 匹配开头的数字,后跟任何字符(捕获为一组)、一个点,然后是任何单词字符。

substring() 函数从字符串中提取匹配的组(用(.*)表示),忽略数字和点。这将为您提供输入字符串中所需的变量部分(“DXS”)。

查询结果将是:

extracted_part
-------------
DXS
© www.soinside.com 2019 - 2024. All rights reserved.