使用PostgreSQL提取字符串结尾部分以外的所有内容

使用PostgreSQL提取字符串结尾部分以外的所有内容,sql,postgresql,Sql,Postgresql,我在Postgres数据库表中有记录,其中某一列中有无关数据。我想从该列中选择除文本以外的所有内容。这段文字位于列中数据的末尾。如果该文本出现在产品名称之前或中间,则不应删除它。 如何编写select语句?下面是数据,我想从结果集中删除单词“test2” id|product_name |owner --------------------- 12|sissors test2 |23 13|Sample test2 |43 14|test2scoop test2 |43 类

我在Postgres数据库表中有记录,其中某一列中有无关数据。我想从该列中选择除文本以外的所有内容。这段文字位于列中数据的末尾。如果该文本出现在产品名称之前或中间,则不应删除它。

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

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

类似于以下的东西应该可以工作:

SELECT id, replace(product_name, 'test3', '') AS product_name, owner FROM ...

类似于以下的东西应该可以工作:

SELECT id, replace(product_name, 'test3', '') AS product_name, owner FROM ...

PostgreSQL手册中的这一部分对您有什么建议

regexp\u replace(字符串文本、模式文本、替换文本[,标志文本])

替换与POSIX正则表达式匹配的子字符串。详见第9.7.3节

regexp\u 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

PostgreSQL手册中的这一部分对您有什么建议

regexp\u replace(字符串文本、模式文本、替换文本[,标志文本])

替换与POSIX正则表达式匹配的子字符串。详见第9.7.3节

regexp\u 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

我只是在猜测你想要什么,但也许这样可以:

select id
     , replace(product_name,' test2,'') as product_name
     , owner
from my_table
我猜你的意思是“test2”而不是“test3”


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

我只是在猜测您想要什么,但也许这样可以:

select id
     , replace(product_name,' test2,'') as product_name
     , owner
from my_table
我猜你的意思是“test2”而不是“test3”



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

为什么不先过滤它,然后再插入它呢?没有这个选项:-/然后,一个选项是创建一个postgresql存储过程,您可以运行该存储过程,该存储过程将在行中运行,并使用一些正则表达式对其进行修复。我是否缺少明显的错误,或者输入数据是否不包括
test3
,那么,任何选择所有数据的方法都能起作用吗?为什么不在插入数据之前对其进行过滤呢?没有这个选项:-/然后,一个选项是创建一个postgresql存储过程,您可以运行该存储过程,该存储过程将在行中运行,并使用一些正则表达式对其进行修复。我是否缺少明显的错误,或者输入数据是否不包括
test3
,因此任何选择所有数据的操作都有效?+1:对于该任务来说已经足够了。最好提供一个URL,这样OP就可以学习如何钓鱼,同时也可以获得今天的鱼。+1:对于这项任务来说已经足够了。最好提供一个URL,这样OP就可以学习如何钓鱼,也可以得到今天的鱼。关于引导空间的观点很好。这对示例数据很好,除非单词出现在字符串的开头,或者作为更大的“单词”的一部分出现,但仍然应该删除。关于前导空格的观点很好。这适用于示例数据,除非单词出现在字符串的开头,或者作为更大的“单词”的一部分,但仍应删除。PS:您可以将文档链接中的版本号替换为“current”,以获取最新版本,不管它是什么;例如:@muistooshort:Thank-知道这一点很有用。更新链接;现在是9.2文档,而不是谷歌发给我的9.1版本。谷歌中似乎有很多链接指向8.3甚至7.1这样的古老版本,我认为这是首选“当前”链接的主要原因,也许我们甚至可以利用所谓游戏谷歌的流行方向:)不起作用。在单词之前和单词内部都有test3的记录,比如:“test2sissors”、“test2 paper”、“papertest2clips”我只想删除产品名称的最后一部分,该部分包含产品末尾的
“test2”
:您可以将文档链接中的版本号替换为“current”获取最新版本,无论它是什么;例如:@muistooshort:Thank-知道这一点很有用。更新链接;现在是9.2文档,而不是谷歌发给我的9.1版本。谷歌中似乎有很多链接指向8.3甚至7.1这样的古老版本,我认为这是首选“当前”链接的主要原因,也许我们甚至可以利用所谓游戏谷歌的流行方向:)不起作用。单词前面和单词内部都有test3的记录,比如:“test2sissors”、“test2 paper”、“papertest2clips”我只想删除产品名称的最后一部分,它包含产品末尾的
“test2”