12

## 问题 ##

我从这个脚本中得到了错误(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接受几乎任意数量的参数,但它们应该是相同的 data-type
我引用了 TSQL 中的 COALESCE 函数

4

1 回答 1

12

零不是有效日期。令人惊讶的是它可以在 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
于 2014-02-19T09:33:09.347 回答