between A and B 的困惑

今天帮同学修改一个权限验证,首先需要验证身份是否合法,再次验证时间是否合法,该系统是一个门禁系统的模拟。


环境为 pb + sql server  ,对于身份的验证那么就照一般的做法,向数据库查询是否存在 用户名=:用户名 密码=:密码的记录就可以了。但是对于时间的验证,就发生了一些小小的麻烦。

数据库中存在表  settime(begintime,endtime) ,由于我是去修改他的代码,原来他写的是

int rows = 0
datetime checktime = today()

select count(*)
into :rows
from settime
where :checktime between begintime and endtime;

我看这上面的代码,他说有错误,的确有错,因为between后面的两个应该是具体的值吧,而不是仅仅是数据库表中的字段,所以顺着这个思路,那么我就想到用个双重循环,先将settime表中的每个记录读取出来,再一个一个的比较,如果能够找到符合条件的话那么就处理其他逻辑。后来又考虑到自己对游标取记录一个一个的取好像做不出来,就又考虑怎么将数据库表中的记录放到某个数据结构中如数组啊什么的,然后再来和当前取得的时间 checktime 作一个比较,但其实这个和前面的考虑没有多少区别。

如此试验了近1个小时吧,然后有事情就离开了。

后来突然想到,作为 between and 结构,其中已知的参数应该是between前面的那个值,而后面两个应该是数据库表中的字段,我跟着原来的思路也没有考虑到这么一点,,于是就不能获得正确的解答。后来使用了 checktime > begintime and checktime <endtime 问题得到解决。

这个是再实际做东西的时候得到的教训,所以以后写sql的时候需要提醒自己,什么是已知,什么是未知。



转载于:https://www.cnblogs.com/canpigfly/archive/2005/05/10/152396.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值