1
select
start_date,stop_date_original
from dates
where 
start_date is not null
and stop_date_original is not null 
and start_date > str_to_date('10/10/2009','%d/%m/%Y')
/*and stop_date_original < str_to_date('01/24/2013','%d/%m/%Y')*/

此查询工作正常,但是当我取消注释最后一行或使用它来替换结果不受影响之前的最后一行或我得到一个空的结果集时。

这种方法是否存在可能导致这种行为的问题?

此外,空检查是否在不同的数据库系统中本质上是必需的?

4

1 回答 1

2

停止日期必须是24/01/2013,而不是01/24/2013

select
  start_date,
  stop_date_original
from
  dates
where 
  start_date is not null
  and stop_date_original is not null 
  and start_date > str_to_date('10/10/2009','%d/%m/%Y')
  and stop_date_original < str_to_date('24/01/2013','%d/%m/%Y')

或者你必须在你的函数上反转日期和月份str_to_date('01/24/2013','%m/%d/%Y')

此外,如果start_date为空,或者如果stop_date_original为空,则条件无论如何都会被评估为空,因此您无需检查它们是否不为空,尽管这使事情更具可读性。

于 2013-01-30T10:05:28.910 回答