背景:我正在将数据库表转换为不支持空值的格式。我想用任意数字替换空值,这样我的应用程序就可以支持空值。
问题:我想在整个表中搜索一个值(例如“999999”),以确保它不会出现在表中。我可以编写一个脚本来单独测试每一列,但我想知道是否有一种方法可以在纯sql中做到这一点,而不必枚举每个字段。有可能吗?
最佳答案
您可以使用PostgreSQL类型系统的特殊功能:
SELECT *
FROM tbl t
WHERE t::text LIKE '%999999%';
在PostgreSQL中创建的每个表都有一个同名的composite type。PostgreSQL中的每种类型(输入/输出值)都有一个
text
表示。因此,您可以将整行强制转换为
text
,如果字符串“999999”包含在任何列中(准确地说,它的text
表示形式),则保证在上面的查询中显示它。但是,如果Postgres用于行表示的分隔符和/或装饰符可以是搜索词的一部分,则不能完全排除误报。这不太可能。当然,你的搜索词“999999”不是这样的。
最近在codereview.SE上有一个非常类似的问题。我添加了some more explanation in my answer there。