如果你的字段类型是date的,可以考虑用下面的语句去实现查询: access里: select * from table1 where format(date1,'yyyy-mm-dd hh:mm:ss') > format (dtmstart,'yyyy-mm-dd hh:mm:ss') and format(date1,'yyyy-mm-dd hh:mm:ss') < format(dtmend,'yyyy-mm-dd hh:mm:ss') 这样可以不用考虑系统时间格式对查询的影响.但是这样做带来的问题是针对全表查询,用不到索引,大数据量会影响性能.
你的意思是要我只对前面的日期做模糊查询? ======================= 其实你不必管其他,关键是你的时间字段在数据库里是什么类型,如果是date/time,那么你大可以不必管后面的下午而自己构建起止时间例如,要查询2005-2-3至2005-3-2的所有记录,可以这样: select * from testtable where dt>='2005-2-3 00:00:00.000' and dt<'2005-3-2 23:59:59.000'
HH:mm:ss
就行了.
你的意思是要我只对前面的日期做模糊查询?
1、将数据库里的时间字段设置成varchar,
2、在录入数据时用format()强制转换成时间格式 yyyy-mm-dd hh:mm:ss
3、查询时用between '起'and '止'就可以查询出结果
这种方法不行哦,在添加进数据库时出错。
access里:
select * from table1 where format(date1,'yyyy-mm-dd hh:mm:ss') > format (dtmstart,'yyyy-mm-dd hh:mm:ss') and format(date1,'yyyy-mm-dd hh:mm:ss') < format(dtmend,'yyyy-mm-dd hh:mm:ss')
这样可以不用考虑系统时间格式对查询的影响.但是这样做带来的问题是针对全表查询,用不到索引,大数据量会影响性能.
直接在数据库里将数据定义成varchar型的,然后在SQL语句中用between将所要查询的条件写出即可。
cogodunker(Eric):这种方法我试过了,就是查询不出来,出现同样的问题。
declare @time varchar(10) --当日的时间
declare @daytime varchar(19) --日期+时间set @day=select convert(varchar(10),你的时间字段的名字,120) --读取字段中的日期
set @time=select convert(varchar(8),你的时间字段的名字,108) --读取字段中的时间
set @daytime=@day+' '+@time --将二者合在一起,组成查询条件
你试试吧!
=======================
其实你不必管其他,关键是你的时间字段在数据库里是什么类型,如果是date/time,那么你大可以不必管后面的下午而自己构建起止时间例如,要查询2005-2-3至2005-3-2的所有记录,可以这样:
select * from testtable where dt>='2005-2-3 00:00:00.000' and dt<'2005-3-2 23:59:59.000'
declare @time varchar(10) --当日的时间
declare @daytime varchar(19) --日期+时间set @day=select convert(varchar(10),你的时间字段的名字,120) --读取字段中的日期
set @time=select convert(varchar(8),你的时间字段的名字,108) --读取字段中的时间
set @daytime=@day+' '+@time --将二者合在一起,组成查询条件
你试试吧!
上面我写的程序是在存储过程中的程序
你可以写个存储过程试试