【问题标题】:ERROR: COALESCE types timestamp without time zone and integer cannot be matched (Postgresql)错误:COALESCE 类型时间戳没有时区和整数无法匹配(Postgresql)
【发布时间】:2014-03-19 04:51:53
【问题描述】:

##问题##

此脚本出错 (Postgresql 9.3.2)
(在 MS SQL Server 中没问题)

SELECT 
 CASE COALESCE(my_date_field,0) 
 WHEN 0 THEN 0 
 ELSE 1 END 
 AS status
FROM 
 my_table

Error :COALESCE types timestamp without time zone and integer cannot be matched
Line 2 : CASE COALESCE(my_date_field,0)

##已解决##

SELECT 
  CASE WHEN my_date_field IS NULL 
  THEN 0 ELSE 1 END 
  AS status
FROM 
  my_table

COALESCE 接受几乎任意数量的参数,但它们应该是相同的数据类型
我引用COALESCE Function in TSQL

【问题讨论】:

    标签: coalesce postgresql-9.3


    【解决方案1】:

    零不是有效日期。令人惊讶的是它可以在 MS SQL 中运行。你需要使用一个合理的日期,或者接受NULL

     CASE COALESCE(my_date_field, DATE '0001-01-01') 
    

    一般来说,这个查询有点奇怪。这不是写IS NULL 的一种令人难以置信的冗长和复杂的方式吗?

    SELECT 
     my_date_field IS NULL AS status
    FROM 
     my_table
    

    如果根据评论,您想要 0 或 1,请使用:

    SELECT 
     CASE WHEN my_date_field IS NULL THEN 1 ELSE 0 END AS status
    FROM 
     my_table
    

    【讨论】:

    • 我只需要在新字段'status'中存储0(如果my_data_field为null)和1(如果my_data_field不为null)
    猜你喜欢
    • 1970-01-01
    • 2020-11-10
    • 2015-08-20
    • 2014-02-12
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    相关资源
    最近更新 更多