我在DELPHI 里面发现一个不能解释的错误,在用ADOQuery+TDateTimePicker进行查询的时候,如:
var
s:string;
begin
s:='select * from Table1 where (day,登陆日期,:sDate) order by Code'
ADOQuery1.close;
ADOQuery1.sql.clear;
ADOQuery1.sql.add(s);
ADOQuery1.paramters.paramterByname('sDate').value:=TDateTimePicker1.DateTime;
ADOQuery1.Open;
end;和下面的写法
var
s:string;
begin
s:='select * from Table1 where (day,登陆日期,:sDate) '
ADOQuery1.close;
ADOQuery1.sql.clear;
ADOQuery1.sql.add(s);
ADOQuery1.paramters.paramterByname('sDate').value:=TDateTimePicker1.DateTime;
ADOQuery1.Open;
end;
这两种写法,执行的结果不一样,有order by 的结果正常,而没有order by 的则出现的结果差两天(例如查询TDateTimePicker1.Date='2004-10-27',而出现的结果是'2004-10-29'),为什么啊,请各位自己在DELPHI 里面试试,(上面的写法可能有少许错误),是不是在DELPHI 里面写SQL 语句的时候,DATEDIFF 和 ORDER BY 之间有某种关联呢?
var
s:string;
begin
s:='select * from Table1 where (day,登陆日期,:sDate) order by Code'
ADOQuery1.close;
ADOQuery1.sql.clear;
ADOQuery1.sql.add(s);
ADOQuery1.paramters.paramterByname('sDate').value:=TDateTimePicker1.DateTime;
ADOQuery1.Open;
end;和下面的写法
var
s:string;
begin
s:='select * from Table1 where (day,登陆日期,:sDate) '
ADOQuery1.close;
ADOQuery1.sql.clear;
ADOQuery1.sql.add(s);
ADOQuery1.paramters.paramterByname('sDate').value:=TDateTimePicker1.DateTime;
ADOQuery1.Open;
end;
这两种写法,执行的结果不一样,有order by 的结果正常,而没有order by 的则出现的结果差两天(例如查询TDateTimePicker1.Date='2004-10-27',而出现的结果是'2004-10-29'),为什么啊,请各位自己在DELPHI 里面试试,(上面的写法可能有少许错误),是不是在DELPHI 里面写SQL 语句的时候,DATEDIFF 和 ORDER BY 之间有某种关联呢?
where datediff(d,登陆日期,:sDate) > 10 //大于10天
s:='select * from Table1 where (day,登陆日期,:sDate)=0 order by Code'
s:='select * from Table1 where (day,登陆日期,:sDate)=‘
针对你的问题是order by 只是对满足条件的记录排序 datediff只是取的日期相差的天数 没有多少关联,把你的问题说的明白点,
s:='select * from 挂号号表 where datediff(day,号表日期,:sDate)=0';
AdsGhhb.Close;
AdsGhhb.SQL.Clear;
AdsGhhb.SQL.Add(s);
AdsGhhb.Parameters.ParamByName('sDate').Value:=DateTimePicker1.DateTime;
AdsGhhb.Open;
和
s:='select * from 挂号号表 where datediff(day,号表日期,'''
+FormatDateTime('yyyy-mm-dd',DateTimePicker2.DateTime)+''')=0';
AdsGhhb.Close;
AdsGhhb.SQL.Clear;
AdsGhhb.SQL.Add(s);
AdsGhhb.Open;
这两种方法执行的结果不一样啊!为什么!!!!
结果仔细一看,DATETIMEPICKER的DATETIME属性是指日期和时间,日期你可以选择,但时间没你创建时默认的时间,而FORMATDATETIME之后就只有再日期了,而它返回的是一个字符串。