小编典典

检查整个表中的单个值

sql

背景: 我正在将数据库表转换为不支持空值的格式。我想用任意数字替换空值,以便我的应用程序可以支持空值。

问题: 我想在整个表中搜索一个值(例如“
999999”),以确保该值未出现在表中。我可以编写一个脚本来分别测试每个列,但是我想知道是否有一种方法可以在不枚举每个字段的情况下在纯sql中执行此操作。那可能吗?


阅读 138

收藏
2021-04-14

共1个答案

小编典典

您可以使用PostgreSQL类型系统的特殊功能:

SELECT *
FROM   tbl t
WHERE  t::text LIKE '%999999%';

在PostgreSQL中创建的每个表都有一个同名的复合类型textPostgreSQL中每种类型都有一个表示形式(用于输入/输出值)。

因此,您可以将整个行text强制转换为,如果字符串“
999999”包含在任何列中(text准确地说是其表示形式),则可以保证在上面的查询中显示该字符串。

但是,如果Postgres用于行表示的分隔符和/或修饰符可以作为搜索项的一部分,则不能完全排除 误报 。这是 非常
不可能的。肯定不是您的搜索词“ 999999”的情况。

最近在codereview.SE上有一个非常相似的问题。我在那里的回答中添加了更多解释

2021-04-14