Delphi 中Access的 时间日期查询问题


法1:通过Format来格式化SQL,Access中yyyy-MM-dd 型日期与其它条件混合查询,写好SQL语句的格式很重要。

  //日期与其它信息混合查询
  SQLStr := Format('select * from SysFlag where Event like ''%s'' and '+
   'UserName like ''%s'' and OpTime between #%s# and #%s#',
   ['%'+Ed_Event.Text+'%','%'+Ed_UserName.Text+'%',
    DateTostr(Dtp_OpTimeStart.Date),DateTostr(Dtp_OpTimeEnd.Date)]);
  with QrySQL do
  begin
     Close;
     SQL.Clear;
     SQL.Add(SQLStr);
     Open;
  end;
 

法2:通过Parameters来传递参数,Access中yyyy-MM-dd HH:mm:ss型日期时间与其它条件混合查询。

var
  SQLStr,TimeStart,TimeEnd:string;
begin
  //混合查询
  TimeStart := FormatDateTime('yyyy-MM-dd',Dtp_OpTimeStart.Date)+' '+
               FormatDateTime('HH:mm:ss',Dtp_OpTimeTimeStart.Time);

  TimeEnd := FormatDateTime('yyyy-MM-dd',Dtp_OpTimeEnd.Date)+' '+
               FormatDateTime('HH:mm:ss',Dtp_OpTimeTimeEnd.Time);

  SQLStr := 'select * from SysFlag where Event like :c and UserName like :d'+
  ' and OpTime >= :a and OpTime <= :b';
  //SQLStr := 'select * from SysFlag where Event like :c and UserName like :d'+
  //' and OpTime between :a and :b';
  with QrySQL do
  begin
    Close;
    SQL.Clear;
    SQL.Add(SQLStr);
    Parameters.ParamByName('c').Value := '%'+Trim(Ed_Event.Text)+'%';
    Parameters.ParamByName('d').Value := '%'+Trim(Ed_UserName.Text)+'%';
    Parameters.ParamByName('a').Value := TimeStart;
    Parameters.ParamByName('b').Value := TimeEnd;
    Open;
  end;
end;

注意:
       用between 。。and。。查询yyyy-MM-dd型日期,若同一天,between后的日期要比and后的日期少1天,between后代表当天。
       用between 。。and。。查询yyyy-MM-dd HH:mm:ss型时间,若同一秒,between后的时间要比and后的时间少1秒,and后代表当前秒数。
       用>=  和 <=  查询,前后日期时间无差别。
      用Parameters参数传递,不加#号更方便。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值