1

我有一个 SQL 查询,它使用 COALESCE 来选择非空日期:

SELECT ...
WHERE 
  COALESCE (date1, date2 ) >= '06/11/2013' AND
  COALESCE (date1, date2 ) <= '06/11/2013' 

问题是,date1 是时间戳,而 date2 是日期。所以,如果 date1 有一个值:

  06/11/2013 11:00:00

在 where 子句中不调用 IT。IE:

 COALESCE (date1, date2 ) >= '06/11/2013' ==> TRUE
 COALESCE (date1, date2 ) <= '06/11/2013' ==> FALSE

我认为这是因为时间被转换为

  06/11/2013 00:00:00

如何转换 '06/11/2013' 以便无论 date1 和 date2 中的值是一天中的什么时间,上述查询都等于 true?我只关心 DAY,而不是时间。

4

1 回答 1

4

我不使用 Firebird,但从文档中,您可以将时间戳转换为日期(顺便说一下,我很惊讶您可以使用coalesce不同的类型,但是......这是另一个问题)。

所以要么

COALESCE(CAST(date1 as date), date2)

或火鸟快捷方式

COALESCE(date date1, date2)

如果您遇到错误,您可以尝试查看执行时发生的情况

select CAST(date1 as date) from ...
于 2013-06-11T12:23:55.737 回答