##问题##
我从这个脚本中得到错误( 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
答案 0 :(得分:3)
零不是有效日期。令人惊讶的是它在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