Access日期时间比较查询语句困扰过很多网友,种豆网整理了一下Access日期比较查询的几种方法,假定数据表明为TblName,日期/时间字段名为FDate(这里不能讲FDate设置为字符串,否则比较查询结果不正确)。
1.Access数据表日期字段同日期字符串直接比较
以下是查询2012年12月12日以后的数据的SQL语句。
select * from TblName where DFDate>#--#
注意:Access日期查询时,表示日期的字符串前后要加#
2.Access数据表日期字段同日期类型变量直接比较
这种方法其实等同于方法一,以下是查询比当前日期(如2012-12-12)早10天的数据的SQL语句。
DateTime queryDate=DateTime.Now.AddDays(-);
string sql = "select * from TblName where DFDate>#"+queryDate+"#";
3.使用DateDiff函数对Access日期字段比较查询
DateDiff,语法如下:
DateDiff( 间隔字符, 日期1, 日期2 [,firstdayofweek[, firstweekofyear]])
通常只需要使用以下方式
DateDiff( 间隔字符, 日期1, 日期2)
这个函数比较的结果是“日期2-日期1”,如果日期1晚于日期2,就会返回负数,其中间隔字符有以下几种表示方式:
"yyyy" 比较年份
"d" 比较日期
"m" 比较月份
示例如下:
select DateDiff( "d", #--#, #--#)
SQL查询结果是:-,表示前面的日期比后面的日期晚10天 select DateDiff( "m", #--#, #--#)
SQL查询结果是:,表示前面的日期比后面的日期早两个月 select DateDiff( "yyyy", #--#, #--#)
SQL查询结果是:-,表示前面的日期比后面的日期晚两年
以下是Access使用DateDiff函数查询2012年12月12日以后的数据的SQL语句。
select * from TblName where DateDiff( "d", DFDate, #--#)<
4.使用DateDiff函数查询Access日期字段等于某个日期的SQL语句
假定数据库中某条记录的FDate=2012-12-12 12:12:12
以下语句的查询结果为0条记录,因为数据库中还包含时间信息,而查询条件中无时间信息。
select * from TblName where FDate=#--#
如果想得到正确的查询结果(1条记录),则需要使用以下SQL语句查询(查询日期为2012年12月12日的数据记录)。
select * from TblName where DateDiff( "d", FDate, #--#) <= AND DateDiff( "d", FDate, #--#)>=
5.要查询出签收时间在处理时间的第二天的14:00:00以前的数据
Select 签收时间,CDate(Format(DateAdd("d", ,处理时间),"yyyy-mm-dd")+" 14:00:00") from 表 where 签收时间 < CDate(Format(DateAdd("d", , 处理时间),"yyyy-mm-dd")+" 14:00:00")
下面的语句查询出签收时间在当天或是在第二天的14:00:00之前的所有数据
select * from table where DATEDIFF(D,CONVERT(datetime,[处理时间],),CONVERT(datetime,[签收时间],))< or ( DATEDIFF(D,CONVERT(datetime,[处理时间],),CONVERT(datetime,[签收时间],))= and DATEPART(HOUR,CONVERT(datetime,[签收时间],))< )
查询某一年的数据:
select * from dt_article where DateDiff( "yyyy", add_time, #2012-1-1#) <= AND DateDiff( "yyyy", add_time, #2012-1-1#)>=