【问题标题】:Query to remove character and text from field查询以从字段中删除字符和文本
【发布时间】:2014-12-24 09:24:11
【问题描述】:

我正在使用 PostgreSQL 数据库。我有一列包含如下所示的行:

我要将“PC”文本替换为“00000”,然后删除句点和之后的所有文本。 因此,例如,第 5 行在转换后应该看起来像 0000055000。

我能够使用覆盖功能的“PC”。所以我当前的查询如下所示:

select set_name, overlay(set_name placing '00000' from 1 for 2 )  FROM
src.sap_setnode 
WHERE set_name LIKE'PC%'

从那里我怎样才能删除句号和之后的所有内容?

谢谢

【问题讨论】:

    标签: sql postgresql replace


    【解决方案1】:
    SELECT SPLIT_PART(REPLACE(set_name ,SUBSTR(set_name ,1,2),'00000'),'.',1) FROM t WHERE set_name LIKE 'PC%' OR set_name NOT LIKE 'PC-%' OR set_name NOT LIKE 'PCA%'
    

    【讨论】:

    • 谢谢 - 这也是我找到的答案。我认为这种方式效果最好。
    • 这看起来不是一个有效的查询
    • '因为您至少缺少右括号和FROM 子句。
    【解决方案2】:

    尝试使用正则表达式,例如:

    UPDATE TABLE SET set_name = regexp_replace(set_name, '^PC(.+)\..+$', '00000\1');
    

    我不完全确定这是否涵盖了您可能遇到的所有极端情况,因此您可能需要稍微调整一下正则表达式 :)

    还有regex_replace 的文档:

    http://www.postgresql.org/docs/9.1/static/functions-string.html

    【讨论】:

      【解决方案3】:

      使用正则表达式替换:

      select  regexp_replace (regexp_replace(set_name,'^PC','00000') , '\.(.*)', '');
      

      【讨论】:

        【解决方案4】:

        我实际上找到了答案 - 如果有人有类似的问题。 split_part 函数可用于通过使用 '.' 来拆分字段。作为分隔符,然后抓取第一部分。

        选择 split_part(覆盖(set_name 将 '00000' 从 1 放入 2),'.',1) FROM src.sap_setnode

        【讨论】:

          猜你喜欢
          • 2015-11-28
          • 2019-10-14
          • 1970-01-01
          • 2021-10-25
          • 1970-01-01
          • 2014-04-19
          • 2011-02-02
          • 1970-01-01
          相关资源
          最近更新 更多