如果我有一个包含这样的列名的表:
name,
name_raw,
item,
item_raw,
message,
message_raw
...
... etc.
如何选择不以_raw
动态结束的每一列?
是这样的:
SELECT
[SOME REGEX LOGIC HERE]
FROM
mytable
或类似的可能吗?
答案 0 :(得分:1)
如果您有很多列无法编写(静态)查询,则可能需要更改数据库的模式。
如果您无法更改架构,这是一个利用postgresql的JSON功能的快速而肮脏的解决方案。它不会返回包含多个列的传统表,而是返回包含json对象的单个列,这些对象包含原始表中名称以_raw
结尾的所有列。
SELECT (
SELECT json_object_agg(key,value)
FROM json_each(to_json(t))
WHERE key ~ 'raw$'
) FROM mytable;
这个想法是将每一行从mytable
转换为JSON对象,然后使用JSON函数来过滤对象的成员。
答案 1 :(得分:1)
使用信息架构,例如
SELECT column_name
FROM information_schema.columns
WHERE table_schema = 'my_schema'
AND table_name = 'mytable'
AND NOT column_name LIKE '%\_raw'
请注意,因为下划线本身是一个查询通配符,它需要"转义"