MsSql和Access关于日期的比较问题

来源:互联网 发布:mac怎么装win7虚拟机 编辑:程序博客网 时间:2024/05/01 23:20

 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函数都是一样无法正确转换成日期型的。

   MsSql--计算两个时间之间间隔-----------------------------------------------------------------------Select DateDiff(day,数据库字段,getdate()) From Table  ===>  可以算出数据库里时间和现在时间之间间隔                                                            如果现在时间小于数据库的时间会取负值     day是取他们之间天数,month取月数,DATEDIFF 函数计算指定的两个日期中第二个日期与第一个日期之间各日期部分相差的时间量。换句话说,它得出两个日期之间的间隔。结果是等于 date2 - date1 的带符号整数值,以各日期部分为单位。如果一个或两个日期参数是 smalldatetime 值,它们将在内部转换为 datetime 值进行计算。为了进行计算,smalldatetime 值中的秒和毫秒将自动设置为 0。

 

Select DateAdd(day,3,数据库字段) From Table ===> DateAdd函数向指定日期添加一段时间间隔例如:如果Table表里的字段存贮的是所有书籍发行的日期,而日期因故要推迟三天则可以使用此函数更新里面的时间如果日期参数的数据类型是 smalldatetime,则结果的数据类型也是 smalldatetime。可以使用 DATEADD 对 smalldatetime 值添加秒或毫秒,但只有当 DATEADD 返回的结果日期至少改变了 1 分钟时,这样做才有意义。

原创粉丝点击