使用具有不同数据类型的 COALESCE?

Using COALESCE with different data types?

我有一个使用 COALESCE(timestamp_type::date,charachter_varying) 的查询,由于数据类型不匹配而失败:

错误:无法匹配 COALESCE 类型的日期和字符变化

如果我将时间戳转换为 text:

COALESCE(timestamp_type::text,charachter_varying)

但是,当我只想要 YYYY-MM-DD(而不是完整的时间戳,YYYY-MM-DD HH:MM:SS.000000+00

时,现在它是 return 完整的时间戳

如何仅使用 COALESCE return 时间戳的日期部分?

您可以使用 to_char 使用适当的格式掩码转换时间戳:

COALESCE(to_char(timestamp_type, 'YYYY-MM-DD'), varchar_col)

正确的转换是

COALESCE(timestamp_type::date::text,char_var)

如果您有 ISO 日期样式,这应该会如您所愿地工作...。但是最好不要依赖 datestyle 设置来转换日期时间 to/from 文本。因此,@Gurwinder Singh 的回答是必经之路。