主题:SQL中时间的比较!!!
zwt
[专家分:1230] 发布于 2006-07-26 09:02:00
比如有一个时间是2007-8-30,然后与当天时间比较,如果时间在2007-8-30范围内,提示“有效”,否则“失笑”,用程序怎么写呢?
回复列表 (共6个回复)
沙发
dodolon [专家分:400] 发布于 2006-08-11 12:19:00
到底要在SQL语句中比较还是程序代码中比较?后者可用DateOf(DateTime1)=DateOf(DateTime2)。
板凳
xukailovechina [专家分:0] 发布于 2006-08-17 13:53:00
if date()='2007-8-30' then
showmessage('有效')
else
showmessage('无效');
当然'2007-8-30'可能是你一张表里的信息,你先要查到它,然后可以给一个变量.让date()与这个变量作比较.
3 楼
duck04551 [专家分:90] 发布于 2006-08-18 12:32:00
你可以先定义一个时间变量,比如:date,然后date1:=now();将你数据库中的时间字段,比如是:date2,再定义两个字符串变量s1,s2,s1:=datetostr(date), s2:=datestostr(date2);然后就可以比较了,
if(s1<>s2) then begin
showmessage('有效')
end;
esle
showmessage('无效');
4 楼
艾肯 [专家分:90] 发布于 2006-08-21 15:02:00
[quote]到底要在SQL语句中比较还是程序代码中比较?后者可用DateOf(DateTime1)=DateOf(DateTime2)。[/quote]
如何在SQL语句中比较呢?
5 楼
dodolon [专家分:400] 发布于 2006-08-22 00:16:00
在SQL语句中比较日期时间是比较麻烦的,因为它与具体的DBMS相关,也就是说对不同的DBMS写出的SQL语句是不一样的,有的DBMS可以用字符串表示日期,有的不可以,或者虽可以但表示方法与其他DBMS不同,因此在SQL语句中比较日期时间要知道所用DBMS的特性,甚至要了解DBMS的内建函数,下面是SQLSERVER的例子:
SELECT * FROM Reck
WHERE (Reck.OccurTime >= CONVERT(DATETIME, '2006-08-01', 102)) AND (Reck.OccurTime <= CONVERT(DATETIME, '2006-08-22', 102))
这个SQL语句放到ACCESS数据库中它就是错的了,因为ACCESS中没有内建CONVERT函数.
6 楼
dodolon [专家分:400] 发布于 2006-08-22 00:48:00
补充: 因为上述原因,如果需要在SQL语句中比较日期时间应尽量采用参数化查询方式,这样可减少与具体DBMS的相关性。示例:
const
SqlText:='SELECT * FROM Reck WHERE (Reck.OccurTime >= :D1) AND (Reck.OccurTime <= :D2)';
var
D1,D2:TDateTime;
begin
D1:=???;
D2:=???;
with ADOQuery1 do
begin
SQL.Text:=SqlText;
Parameters.ParamByName('D1').DataType:=ftDateTime;
Parameters.ParamByName('D1').Value:=D1;
Parameters.ParamByName('D2').DataType:=ftDateTime;
Parameters.ParamByName('D2').Value:=D2;
Open;
......
end;
end;
我来回复