如果前者存在,如何创建一个选择列而不是另一列的 postgres 查询

how to create a postrgres query selecting a column instead of another if former exists

我需要像这样为 postgresql (9.1+) 创建一个查询(在 php 中,但这并不重要)

select (<t1.column1 -if exists- or t2.column2>)::timestamp from t1 join t2 on <join field>

我在写一些类似的东西:

SELECT bytes_in, 
       coalesce((select column_name from information_schema.columns where table_name = 'table2' and column_name = 'override_tetime'), test_endtime)::timestamp as tetime
  FROM table2 t
  JOIN table1 tr ON (tr.id=t.tres_id)
 WHERE tetime BETWEEN '2016-06-01' AND '2017-01-01'

但问题是检索到的字段是一个字符串,无法与类型为 timestamp with time zone

的字段 test_endtime 合并

P.S。我会更好地解释我需要什么,查询可以在不同的 table 之间:table1(在上面的示例中)将始终包含一个 test_endtime 列和各种其他 tables table2...tableN 其中可能是也可能不是 override_tetime 列;如果连接的 table 具有该列,则生成的行集应使用来自 override_tetime 列的时间戳。

希望现在更容易理解了。

无法使用 SQL 中的单个语句执行此操作。

您必须在查询中的某处指定 t1.column1 的名称(作为标识符,而不是字符串常量),如果 t1 没有,这将触发解析错误名为 column1.

的列

您必须在第一个查询中检查列是否存在(可能像您一样查询 information_schema),然后根据第一个查询的结果发出第二个查询。

如果您不想在您的应用程序代码中使用该逻辑,可以轻松编写一个 PostgreSQL 函数来为您完成。