我的表中有两列有日期范围,一个是开始,另一个是结束。当我使用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)
答案 0 :(得分:1)
这应该适合你:
WHERE start_period_Date <= @periodDate
AND (end_period_Date >= @periodDate OR end_period_Date IS NULL);
我也总是advise against using BETWEEN
with dates。
您的查询存在的问题是您要限制以下两种情况之一:
@periodDate BETWEEN start_period_date AND end_period_date
end_period_date IS NULL
任何一个都可以返回一行,因为你的第二个谓词根本没有引用@periodDate
,那么你将得到end_period_date
为空的所有行,无论{start_period_date
如何1}}。