【问题标题】:PostgreSQL : How to remove from varchar field starting from special character?(regexp_replace)PostgreSQL:如何从特殊字符开始的 varchar 字段中删除?(regexp_replace)
【发布时间】:2016-11-09 14:57:23
【问题描述】:

我想删除在 VARCHAR 字段(包括)中第一次出现字符“M”之后的所有内容。

所以SELECT regexp_replace('The world Mine is mine')

应该产生:'The world '

这相当于

SELECT left('The world Mine is mine',INSTR('The world Mine is mine','M',1,1)-1)

但是,如果没有leftinstr,如何实现呢?很高兴收到回复。

【问题讨论】:

  • 我建议不要为此使用 SQL。为什么不把它拉进python之类的东西里面处理呢?
  • 我不想为这个小要求使用外部应用程序。这可以在 SQL 中处理(如我之前所示),我只想以有效的方式解决这个问题。
  • 我假设你没有在事务数据库中这样做,如果是这样的话,我希望是这样,你没有理由不能编写一个简单的 py 脚本来处理这个问题。它不是“外部应用”
  • 使用left()instr()有什么问题?

标签: postgresql regexp-replace


【解决方案1】:

您可以为此使用捕获组:

SELECT regexp_replace('The world Mine is mine', '(.*)(M.*)', '\1')

返回

regexp_replace
--------------
The world     

正则表达式非常昂贵,使用left()instr() 很可能会快很多。

【讨论】:

  • 您可能需要此正则表达式:'([^M]*)(M.*)',否则如果您以大写“M”开始行并将另一个大写“M”留在其中,则它不起作用。无论您做什么,请务必在所有位置和多个位置使用“M”仔细测试。总是期待意外并确保正则表达式可以处理它。
  • P.S.我在 Oracle 中测试过,如果 postgresql 不同,我深表歉意。
猜你喜欢
  • 2021-02-17
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-19
  • 1970-01-01
  • 2020-04-25
  • 1970-01-01
相关资源
最近更新 更多