在日期比较mysql中包含空值

时间:2015-11-30 12:37:23

标签: mysql sql hibernate

我的表中有两列有日期范围,一个是开始,另一个是结束。当我使用hibernate从我的Java程序传递搜索值时,我希望得到值在该范围内的所有行。 例如: 如果我通过' 2008-08-29',它应该从2008年到2012年的列中列出所有行#start;#start;'并且'结束'。 但是2012年还有另一个范围,其开始时间是2012-07-01'但是'结束' column具有NULL值。在这种情况下我该怎么做?

这就是我所做的。但它也会带来一些不在此范围内的其他行。

SELECT * FROM `building_register_period` 
WHERE (@periodDate BETWEEN start_period_date AND end_period_date OR end_period_date IS NULL)

1 个答案:

答案 0 :(得分:1)

这应该适合你:

WHERE start_period_Date <= @periodDate 
AND (end_period_Date >= @periodDate OR end_period_Date IS NULL);

我也总是advise against using BETWEEN with dates

您的查询存在的问题是您要限制以下两种情况之一:

  1. @periodDate BETWEEN start_period_date AND end_period_date
  2. end_period_date IS NULL
  3. 任何一个都可以返回一行,因为你的第二个谓词根本没有引用@periodDate,那么你将得到end_period_date为空的所有行,无论{start_period_date如何1}}。