背景: 我正在将数据库表转换为不支持空值的格式。我想用任意数字替换空值,以便我的应用程序可以支持空值。
问题: 我想在整个表中搜索一个值(例如“ 999999”),以确保该值未出现在表中。我可以编写一个脚本来分别测试每个列,但是我想知道是否有一种方法可以在不枚举每个字段的情况下在纯sql中执行此操作。那可能吗?
您可以使用PostgreSQL类型系统的特殊功能:
SELECT * FROM tbl t WHERE t::text LIKE '%999999%';
在PostgreSQL中创建的每个表都有一个同名的复合类型。textPostgreSQL中每种类型都有一个表示形式(用于输入/输出值)。
text
因此,您可以将整个行text强制转换为,如果字符串“ 999999”包含在任何列中(text准确地说是其表示形式),则可以保证在上面的查询中显示该字符串。
但是,如果Postgres用于行表示的分隔符和/或修饰符可以作为搜索项的一部分,则不能完全排除 误报 。这是 非常 不可能的。肯定不是您的搜索词“ 999999”的情况。
最近在codereview.SE上有一个非常相似的问题。我在那里的回答中添加了更多解释。