PostgreSQL-如何用任何字符串替换空字段?

PostgreSQL-如何用任何字符串替换空字段?,postgresql,null,coalesce,Postgresql,Null,Coalesce,我试图用我想要的任何字符串替换查询结果中得到的一些空(NULL)字段。这些空字段放在“没有时区的时间戳”列中。所以我尝试使用COALESCE函数,但没有结果(我得到错误:timestamp的输入语法无效:“any_string”: 有什么不对劲吗 表: ╔════╦═════════════════════╦═════════════════════╗ ║ id ║ date ║ date2 ║ ╠════╬═══════════════

我试图用我想要的任何字符串替换查询结果中得到的一些空(NULL)字段。这些空字段放在“没有时区的时间戳”列中。所以我尝试使用COALESCE函数,但没有结果(我得到错误:timestamp的输入语法无效:“any_string”:

有什么不对劲吗

表:

╔════╦═════════════════════╦═════════════════════╗
║ id ║        date         ║        date2        ║
╠════╬═════════════════════╬═════════════════════╣
║  1 ║ 2013-12-17 13:54:59 ║ 2013-12-17 09:03:31 ║
║  2 ║ 2013-12-17 13:55:07 ║ 2013-12-17 09:59:11 ║
║  3 ║ 2013-12-17 13:55:56 ║ empty field         ║
║  4 ║ 2013-12-17 13:38:37 ║ 2013-12-17 09:14:01 ║
║  5 ║ 2013-12-17 13:54:46 ║ empty field         ║
║  6 ║ 2013-12-17 13:54:46 ║ empty field         ║
║  7 ║ 2013-12-17 13:55:40 ║ empty field         ║
╚════╩═════════════════════╩═════════════════════╝
示例查询:

select q1.id, q2.date, q3.date2
from (select distinct id from table1) q1
left join (select id, date_trunc('seconds', max(time)) as date from table2 where time::date = now()::date group by id) q2 on q1.id = q2.id
left join (select id, date_trunc('seconds', min(time2)) as date2 from table1 where time2:date = now()::date group by id) q3 on q1.id = q3.id
order by 1
问题是用我想象中的任何字符串替换上面的空字段。

返回一个
时间戳
,因此不能在同一列中放入类似
的字符串


您必须选择一种格式,尽管它当然不再可用作日期。

coalesce
函数仅适用于整数数据类型。它不适用于任何其他数据类型

在其中一种情况下,我使用
\u columnName\:integer
语法将varchar数据类型转换为
coalesce
函数中的整数。
但在您的情况下,我认为时间戳不会转换为整数数据类型。

您可以使用
::text将时间戳转换为文本

select column1, coalesce(date_trunc('seconds', min(date))::text, 'any_string') as column2

您的查询在没有替换空字段部分的情况下可以工作吗?是的,它可以工作。我只想用我想要的字符串替换这些空日期。我已经使用to_char()函数转换了日期,但现在它像以前一样给我空字段,没有错误:coalesce(to_char(date_trunc('seconds',min(date)),'yyyyy-MM-DD HH24:MI:SS'),any_string')I.您应该发布一个完整的自我完成示例,包括表创建、示例数据和实际查询。我已经尝试过了,但它仍然返回空字段而不是文本:(选择q1.id,coalesce(q2.date::text,'any_string'),coalesce(q3.date2::text,'any_string'),来自。。。
select column1, coalesce(date_trunc('seconds', min(date))::text, 'any_string') as column2