我有一个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。即:
COALESCE (date1, date2 ) >= '06/11/2013' ==> TRUE
COALESCE (date1, date2 ) <= '06/11/2013' ==> FALSE
我认为这是因为时间被转换为
06/11/2013 00:00:00
如何转换'06 / 11/2013',以便上述查询等于true,无论day1和date2中的值是什么时间?我只关心这一天,而不是时间。
答案 0 :(得分:4)
我不使用Firebird,但是从文档中,您可以将时间戳转换为日期(顺便说一句,我很惊讶您可以使用不同类型的coalesce
,但是。那是另一个问题。)
所以要么
COALESCE(CAST(date1 as date), date2)
或Firebird快捷方式
COALESCE(date date1, date2)
如果您遇到错误,可以尝试查看
时发生的情况select CAST(date1 as date) from ...