0

我在 Postgres 数据库表中有记录,其中特定列中有无关数据。我想从该列中选择除那段文本之外的所有内容。那段文本位于列中数据的末尾。如果该文本出现在 product_name 之前或中间,则不应将其删除。

如何编写选择语句?下面是数据,我想从结果集中删除单词“test2”。

id|product_name    |owner
---------------------
12|sissors test2   |23
13|Sample test2    |43
14|test2scoop test2   |43
4

3 回答 3

2

像下面这样的东西应该工作:

SELECT id, replace(product_name, 'test3', '') AS product_name, owner FROM ...
于 2013-04-14T23:58:04.440 回答
2

PostgreSQL 手册中关于字符串函数的部分对你有什么建议?

regexp_replace(string text, pattern text, replacement text [, flags text])

替换匹配 POSIX 正则表达式的子字符串。有关详细信息,请参阅第 9.7.3 节。

regexp_replace('Thomas', '.[mN]a.', 'M')

因此:

SELECT id, regex_replace(product_name, 'test3', '') AS product_name, owner
  FROM data -- since the table is anonymous in the question

这就是复杂的——还有replace纯文本映射(通过手册页上的函数列表稍远一点),这足以完成手头的任务。

SELECT id, replace(product_name, 'test3', '') AS product_name, owner
  FROM data -- since the table is anonymous in the question
于 2013-04-14T23:59:52.077 回答
1

我只是在猜测你想要什么,但也许这会做:

select id
     , replace(product_name,' test2,'') as product_name
     , owner
from my_table

我也猜你的意思是“test2”而不是“test3”。

另请注意,我在搜索字符串中显示了一个前导空白。这是基于提供的示例数据。

于 2013-04-14T23:59:54.277 回答