关于ACCESS的日期类型字段比较的一点认识

本文详细介绍了在ACCESS数据库中进行日期时间字段比较的有效方法,包括使用CDATE函数和正确处理日期格式,避免直接字符比较带来的问题,确保日期范围查询的准确性。

ACCESS的日期时间比较,这是个较难办的东西,从前试过几次,都不是很成功,就只能将日期字段更改为字符类型,直接进行字符比较,现在又碰到了,经过反复测试,终于找到原因,在ACCESS的日期比较上面要用到CDATE的函数会比较方便一些。具体示例如下:
ADOQuery1.SQL.Text:=select * from tablename where ((cdate(PTime)>=cdate(:s3)) and (cdate(PTime)<=cdate(:s4)))';
ADOQuery1.Parameters.ParamValues['s3'] :=
          FormatDateTime('YYYY-MM-DD 00:00:00', DateTimePicker1.DATE);
ADOQuery1.Parameters.ParamValues['s4'] :=
          FormatDateTime('YYYY-MM-DD 23:59:59', DateTimePicker2.DATE);
ADOQuery1.Open;
数据库中日期字段的格式为常规日期(YYYY-MM-DD hh:nn:ss)单独进行日期比较就采用上面这个方法,否则在进行>=2005-10-26 and <=2005-10-26的同一天日期比较时,会找不到这一天的数据。
之前一直采用的是直接生成SQL语句的方式,生成的SQL语句虽然在ACCESS的查询中能正常操作,但一移到DELPHI来执行就是不行,提示错误信息:不正地定义参数对象。提供了不一致或不完整的信息 。经朋友小李飞刀提醒,才发现是由于DELPHI把时间里的“:”及后面的值当成了变量参数来处理,所以执行不成功。遂改成带参数的方式再赋值后,语句就顺利通过了。
在直接赋日期类型的值时,一个是直接在值的前后加”#“号,然后与数据库里的日期型字段比较。例 select * from tablename where ((cdate(PTime)>=#2005-10-26#);
另一个方法就是将值赋进去后,通过ACCESS自已的CDATE函数来转换,就象上面那样,这样就可正常比较了。但无论采用哪种方式,都需要赋值的字符串符合日期型所允许的格式,若是直接20051026121000的字符串,加上“#”号或CDATE函数都是一样无法正确转换成日期型的。

转载于:https://www.cnblogs.com/railgunman/archive/2011/01/03/1924336.html

全面的access的日期和时间函数 1.Cdate(日期表达式) 将日期表达式转换成日期类型的数据。 日期表达式是任何可以解释成日期的表达式,包含日期文字,可以看作日期的字符串以及从函数返回的日期。 比如:myDate = CDate("99-5-20") ,这样的日期表达式必须加双引号,否则结果不可预料。 CDate 依据系统上的区域设置来决定日期的格式。如果提供的格式为不可识别的日期设置,则不能正确判断年、月、日的顺序。 2.Now() 返回当前计算机系统设置的日期和时间。 3.Year(日期表达式) 返回表示年份的整数。 比如:Year("00-6-15") = 2000 4.Month(日期表达式) 返回 1 到 12 之间的整数,表示一年中的某月。 比如:Month("00-6-15") = 6 5.DateAdd(interval, number, date) DateAdd 函数语法中有下列命名参数: 部分 描述 interval 必要。字符串表达式,是所要加上去的时间间隔。 number 必要。数值表达式,是要加上的时间间隔的数目。其数值可以为正数(得到未来的日期),也可以为负数(得到过去的日期)。 date 必要。Variant (Date) 或表示日期的文字,这一日期还加上了时间间隔。 设置 interval 参数具有以下设定值: 设置 描述 yyyy 年 q 季 m 月 y 一年的日数 d 日 w 一周的日数 ww 周 h 时 n 分钟 s 秒 说明 可以使用 DateAdd 函数对日期加上或减去指定的时间间隔。 例如,可以用 DateAdd 来计算距今天为三十天的日期;或者计算距现在为 45 分钟的时间。 为了对 date 加上“日”,可以使用“一年的日数” (“y”),“日” (”d”) 或“一周的日数” (”w”)。 DateAdd 函数将不返回有效日期。在以下实例中将 1 月31 日加上一个月: DateAdd(m, 1, 31-Jan-95) 上例中,DateAdd 返回 1995 年 2 月 28 日,而不是 1995 年 2 月 31 日。 如果 date 是 1996 年 1 月 31 日,则由于 1996 年是闰年,返回值是 1996 年 2 月 29 日。 如果计算的日期超前 100 年(减去的年度超过 date 中的年份),就会导致错误发生。 如果 number 不是一个 Long 值,则在计算时取最接近的整数值来计算。 注意 DateAdd 返回值的格式由 Control Panel设置决定,而不是由传递到date 参数的格式决定。 事例: DateAdd("d",10,"2000-6-18") 结果是: 2000-06-28 DateAdd("m",-1,"2000-6-18") 结果是: 2000-05-18 等等·················
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值