【问题标题】:Replace A-Z and 0-9 in query sql postgresql替换查询sql postgresql中的A-Z和0-9
【发布时间】:2019-02-22 14:37:02
【问题描述】:

我目前有字符串,例如E-1082067D,我想为每一行查询出这些字符串的简化版本。返回 L(用于代替 A-Z 的字母)、S(用于符号)和 N(用于数字 0-9)。我无法更新数据库或创建新表,因为我没有权限,只想查询数据。

到目前为止,我已经将我的字符串拆分为单个字符,现在想要替换拆分的字符并将它们连接在一起以给出我的最终结果,例如,代替E-1082067D 将是LSDDDDDDDL

任何关于如何清理以下内容或我是否以错误方式处理此问题的反馈将不胜感激。

s

elect site_name,natid, x, COUNT (x), substring(natid,1,1)as a,
substring(natid,2,1)as b,
substring(natid,3,1)as c,
substring(natid,4,1)as d,
substring(natid,5,1)as e,
substring(natid,6,1)as f,
substring(natid,7,1)as g,
substring(natid,8,1)as h,
substring(natid,9,1)as i,
substring(natid,10,1)as j,
substring(natid,11,1)as k,
substring(natid,12,1)as l,
substring(natid,13,1)as m 
from (
select site_name, subject_id, natid,natidchk, length(natid)as x
from demog 
order by x) as y
group by natid, site_name,  x
order by site_name, x;

【问题讨论】:

    标签: sql postgresql replace


    【解决方案1】:

    这可以通过使用多个正则表达式来实现:

    with data (natid) as (
       values 
          ('E-1082067D'), 
          ('X&42FOO567$BAR')
    )
    select natid, 
           regexp_replace(regexp_replace(regexp_replace(natid, '([A-Z])', 'L', 'ig'), '[0-9]', 'N', 'ig'), '[-&$]', 'S', 'ig')
    from data;       
    

    首先将所有出现的A-Z 替换为L,然后将所有出现的0-9 替换为N-&$ 替换为S

    以上返回:

    natid          | regexp_replace
    ---------------+---------------
    E-1082067D     | LSNNNNNNNL    
    X&42FOO567$BAR | LSNNLLLNNNSLLL
    

    【讨论】:

    • 太棒了!这比子字符串分离然后替换然后连接好得多!继续研究正则表达式!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 2012-04-10
    相关资源
    最近更新 更多