需要Postgres中N未知的列的前N个字符

时间:2018-09-05 11:01:50

标签: string postgresql substring

我在Postgres的表中有一列,假设是employeeId。我们根据员工类型进行一些修改,并将其存储在数据库中。基本上,我们从这四个字符串('ACR','AC','DCR','DC')中追加字符串。现在,我们可以将这4个字符串的任意组合附加在employeeId之后。例如EMPIDACRDCEMPIDDCDCRAC等。这些是有效的组合。我需要从中检索EMPID。 EMPID长度不固定。该列为可变长度类型。如何在Postgres中完成?

非常感谢。 :)

1 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解问题,但是regexp_replace()似乎可以解决问题:

with sample (employeeid) as (
  values
  ('1ACR'),
  ('2ACRDCR'),
  ('100DCRAC')
)
select employeeid,
       regexp_replace(employeeid, 'ACR|AC|DCR|DC.*$', '', 'gi') as clean_id
from sample

返回:

employeeid | clean_id
-----------+---------
1ACR       | 1       
2ACRDCR    | 2       
100DCRAC   | 100     

正则表达式说“在这些字符串中的任何字符之后直到字符串结尾的任何字符”-然后将其替换为空。但是,如果实际的Empid包含任何附加的代码,则此方法将无效。


将这些信息存储在两列中会更干净。一种是空的,另一种是“代码”