可能大家有些不太明白 其实就是比如说要查2002.6-2002.11的缴费用户 我刚开始是条件语句是这样的 缴费开始年份<=2002 and 缴费结束月份<=6 AND 缴费结束年份>=2002 and 缴费结束月份>=11 后来才发现这样是很不对的 如果是缴费从2002.5-2003.1这样按照我的条件是不对其实这个用户在这段是缴过了 归结束起来也就是 缴费开始时段要<=2002.6,缴费结束时段>=2002.11
A: [缴费开始时段] 如:2001.6.23(同时把开始缴费开始时段和结束时段折分若个字段保存到数据库里) B: [缴费结束时段] 如:2002.12.12 AY: [缴费开始年份] 如2001 AM: [缴费开始月份] 如:6 BY: [缴费结束年份] 如:2002 BM: [缴费结束月份] 如:12SELECT * FROM TABLE1 WHERE CONVERT(VARCHAR(7),A)<='2001-06' AND CONVERT(VARCHAR(7),B)>='2002-12'或者 select * from table1 where year(a)<='2001' and month(a)<=6 and year(b)>='2002' and month(b)>=12或者 select * from table1 where ay<='2001' and am<=6 and by>='2002' and bm>=12
其实你可以先组织好待查询的条件1和条件2; Select * from [缴费情况] where [缴费开始时段]>=条件1 and [缴费开始时段]<=条件2不知有何难解的?
那就用 (缴费结束年份<=2002 and 缴费结束月份<=6) or (缴费开始年份>=2002 and 缴费开始月份>=11)
select * from table where starttime<'2002-05-00' and endtime>'2002-07-00' 这句语法是不对的就算是对也不能满足我的要求 比如我某个人的缴费时段记录是2002.05.12-2002.02.08 按照你这个去查根本查不到啊!因为2002.05.12>2002.05.00 我不要精确到天数,只要精确到月份就可以了
renzhm(戴尔飞): 你这种我也考虑过,虽然用SQL写起来方便些 可是仍然很烦
(缴费结束年份<=2002 and 缴费结束月份<=6) or (缴费开始年份>=2002 and 缴费开始月份>=11)这样的话当然不行了 举个例子: 某人缴费记录是:2002.6-2002.7这个应该不符合条件的 按照你的思路这个人也符合条件了
望尘兄 Select * from [缴费情况] where [缴费开始时段]>=条件1 and [缴费开始时段]<=条件2 你的意思我知道,你这样的话是精确到天数了 我的意思只精确到月份就可以了
依我之见,把时间一换为‘2002-06-01’,时间二换为'2002-12-01'Select * from [缴费情况] where [缴费开始时段]>=时间1 and [缴费开始时段]<时间2就可以了
var BeginDate,EndDate: TDateTime; begin BeginDate:= EncodeDate(StartYear,StartMonth,1,0,0,0,0); EndDate:= EncodeDate(EndYear,EndMonth,1,0,0,0,0); with tablel do begin Close; SQL.Clear; SQL.Add(''); //详细内容你自己写 ParamByName(''):= BeginDate; ParamByName(''):= EndDate; PrePare; Open; end; end;
其实就是比如说要查2002.6-2002.11的缴费用户
我刚开始是条件语句是这样的
缴费开始年份<=2002 and 缴费结束月份<=6 AND 缴费结束年份>=2002 and 缴费结束月份>=11
后来才发现这样是很不对的
如果是缴费从2002.5-2003.1这样按照我的条件是不对其实这个用户在这段是缴过了
归结束起来也就是
缴费开始时段要<=2002.6,缴费结束时段>=2002.11
B: [缴费结束时段] 如:2002.12.12
AY: [缴费开始年份] 如2001
AM: [缴费开始月份] 如:6
BY: [缴费结束年份] 如:2002
BM: [缴费结束月份] 如:12SELECT * FROM TABLE1 WHERE CONVERT(VARCHAR(7),A)<='2001-06' AND CONVERT(VARCHAR(7),B)>='2002-12'或者
select * from table1 where year(a)<='2001' and month(a)<=6 and
year(b)>='2002' and month(b)>=12或者
select * from table1 where ay<='2001' and am<=6 and
by>='2002' and bm>=12
Select * from [缴费情况] where [缴费开始时段]>=条件1 and [缴费开始时段]<=条件2不知有何难解的?
(缴费结束年份<=2002 and 缴费结束月份<=6) or (缴费开始年份>=2002 and 缴费开始月份>=11)
这句语法是不对的就算是对也不能满足我的要求
比如我某个人的缴费时段记录是2002.05.12-2002.02.08
按照你这个去查根本查不到啊!因为2002.05.12>2002.05.00
我不要精确到天数,只要精确到月份就可以了
你这种我也考虑过,虽然用SQL写起来方便些
可是仍然很烦
举个例子:
某人缴费记录是:2002.6-2002.7这个应该不符合条件的
按照你的思路这个人也符合条件了
Select * from [缴费情况] where [缴费开始时段]>=条件1 and [缴费开始时段]<=条件2
你的意思我知道,你这样的话是精确到天数了
我的意思只精确到月份就可以了
BeginDate,EndDate: TDateTime;
begin
BeginDate:= EncodeDate(StartYear,StartMonth,1,0,0,0,0);
EndDate:= EncodeDate(EndYear,EndMonth,1,0,0,0,0);
with tablel do
begin
Close;
SQL.Clear;
SQL.Add(''); //详细内容你自己写
ParamByName(''):= BeginDate;
ParamByName(''):= EndDate;
PrePare;
Open;
end;
end;