s1:='select * from 人员表 where (( (datepart(mm,出生日期)=:aa)and(datepart(dd,出生日期)>=:bb)) or(datepart(mm,出生日期)>:aa) ) and (( (datepart(mm,出生日期)=:cc)and(datepart(dd,出生日期)<=:dd)) or(datepart(mm,出生日期)<:cc) )'; adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(s1);
adoquery1.Parameters.ParamByName('aa').Value :=a1;
adoquery1.Parameters.ParamByName('bb').Value :=a2;
adoquery1.Parameters.ParamByName('cc').Value :=a3;
adoquery1.Parameters.ParamByName('dd').Value :=a4; adoquery1.Open ; 以上是本人写的程序,要求是查找符合a1月a2日到a3月a4日之间的生日的人员。
编辑无错,但是显示出来的却只有A1当月A2日以后的生日。大于A1月的却查不到。
好象OR以后的语句没有起到作用。
希望各位大哥帮帮忙啦,俺在这里先谢谢了。
adoquery1.SQL.Clear;
adoquery1.SQL.Add(s1);
adoquery1.Parameters.ParamByName('aa').Value :=a1;
adoquery1.Parameters.ParamByName('bb').Value :=a2;
adoquery1.Parameters.ParamByName('cc').Value :=a3;
adoquery1.Parameters.ParamByName('dd').Value :=a4; adoquery1.Open ;
老兄能不能告诉一下,为什么要那样写呢?
SELECT *
FROM 人员表
WHERE (DATEPART(mm, 出生日期) >= :aa) AND (DATEPART(dd, 出生日期) >= :bb) AND
(DATEPART(mm, 出生日期) <= :cc) AND (DATEPART(dd, 出生日期) <= :dd)