首页 > 解决方案 > 如何根据列中的条件递归更新PostgreSQL中的表

问题描述

我有一个 PostgreSQL 数据库,其中包含许多不同的表和关系。有一张名为 User 的表。在我们的项目中,当人们加入产品时,他们可以选择提供 FirstName 和 LastName。在 User 表中,它被保存在一列“name”下,因此它看起来像这样:“Alex Smith”(它们之间正好有一个空格)。有一个小错误,如果用户不提供 FirstName 或 LastName,JavaScript 会插入未定义的。我们的基地是这样的:在此处输入图像描述

如果没有 FirstName,则为“undefined LastName”,或者相反,或“undefined undefined”。现在bug解决了,但是基础需要稍微清理一下。有成千上万的用户具有未定义的 FirstNames 或 LastNames 或两者。我试图做的是编写一个PostgreSQL查询,它递归地遍历表用户并检查列中是否存在“未定义”并用空字符串“”替换未定义。

我的问题是我只需要检查和替换未定义的,如果有“未定义的史密斯”,只有未定义的应该替换为空字符串。我查看了官方文档,在 StackOverflow 中,我找不到任何类似的案例。如果有人有线索,将不胜感激。

提前致谢。

标签: sqlpostgresqlrecursive-query

解决方案


查找 Postgres字符串函数修剪和替换。将它们一起使用是您正在寻找的。类似的东西(见例子

update user 
  set name = trim(replace(name, 'undefined',''));

警告: USER是一个非常糟糕的表名;它是 Postgres 和 SQL 标准的保留字。虽然您可以侥幸在预定义的含义之外使用它,但 Postgres 开发人员会很好within their writes to make in an invalid name at any time切勿使用保留字或数据类型作为 DB 对象名称。


推荐阅读