我有一个表,其中包含带有startdate(日期时间)的项目的历史记录 - 它应该只允许一个项目与日期相对应。有一个验证程序将采用日期并返回代码(成功/失败原因代码)以及最接近今天的“下一个”历史项目。
如果这是表格数据(id日期标题):
1 16/05/2010 'item 1'
2 17/05/2010 'item 2'
3 20/05/2010 'item 3'
我想验证一个条目:
exec Validate '18/05/2010' 'item 4'
会返回我:'第4项',因为该条目有效,虽然数据尚未提交,但它会将我的新条目作为下一个可用项目返回,因为它最接近(将来)到今天。
exec Validate '24/05/2010' 'item 5'
应该给我回复:'第3项'。日期也是有效的,但是有一个记录,然后是新的日期,但是比今天晚。
答案 0 :(得分:1)
您可以将检查基于下一个查询:
select min(startdate)
from itemstable
where datediff(d, getdate(), startdate)>0
and datediff(d, startdate, @datetocheck)>=0
第一个条款检查未来的开始日期,第二个条款为开始日期之前或与您提供的开始日期相同。
(某些比较可能是错误的 - 总是发生日期问题:))