问题描述
SELECT*FROMResultWHERE测量时间between#03/01/20116:30:30#and#03/27/201123:45:30#;我用上面的sql语句检索出的却是是3月1号到3月27号所有日期24小时的数据,我想检索出日期在3月1号到3月27号,同时时间又在6:30:30and23:45:30之间的数据应该怎么弄?求高手指导。
解决方案
解决方案二:
SELECT*FROMResultWHERE(测量时间between#03/01/20116:30:30#and#03/27/201123:45:30#)and(convert(varchar,测量时间,8)between#6:30:30#and#23:45:30#)不知道你那可以用这函数不,试试
解决方案三:
带了#你用的是ACCESS数据库吧,LS方法可以,把时间转换成ShortTime再判断一次
解决方案四:
我使用的时候提示说是convert这个函数未定义,怎么办啊?
解决方案五:
在SQL中,datetime类型的字段,其时间段检索时,可以采用两种方式来过滤:1.Between...And2.>=和<但是,两者检索的结果相同吗?比如,检索2010五月份的所有记录,按照上面两种方式,其SQL写法如下:(DT字段Between'2010-5-1'And'2010-6-1')和(DT字段>='2010-5-1'andDT字段<'2010-6-1')检索结果相信会令人很意外,竟然差别很大。//--创建临时表并初始化数据CREATETABLE#dts(c1char(1),dtdatetime)INSERTINTO#dts(c1,dt)VALUES('a','2004030509:12:59')INSERTINTO#dts(c1,dt)VALUES('b','2004030516:03:12')INSERTINTO#dts(c1,dt)VALUES('c','2004030600:00:00')INSERTINTO#dts(c1,dt)VALUES('d','2004030602:41:32')INSERTINTO#dts(c1,dt)VALUES('e','2004031511:45:17')INSERTINTO#dts(c1,dt)VALUES('f','2004041209:12:59')INSERTINTO#dts(c1,dt)VALUES('g','2004052311:43:25')//--检索20040305一整天的数据SELECTc1,dtFROM#dtsWHEREdtBETWEEN'20040305'AND'20040306'结果:2004030509:12:592004030516:03:122004030600:00:00(怪了,怎么连2004030600:00:00这条记录也有?)[原因]:因为Between是包容第二个日期范围的00:00:00记录!//--既然如此,那么第二个日期检索条件改为'2004030523:59:59.999'SELECTc1,dtFROM#dtsWHEREdtBETWEEN'20040305'AND'2004030523:59:59.999'结果:2004030509:12:592004030516:03:122004030600:00:00(真TMD怪,还是有2004030600:00:00这条记录!!!)[原因]:因为在datetime日期类型的定义中,"2004-03-0523:59:59.999"会被自动舍入"2004-03-0600:00:00.000"-----------------------------此时,可发现Between..And操作基于日期格式的检索,确实够麻烦的!解决办法:那就是采用">="和"<"的方式来检索,这样可以避免以上麻烦的操作!//--检索20040305一整天的数据SELECTc1,dtFROM#dtsWHEREdt>='20040305'ANDdt<'20040306'//--检索200403整月的数据SELECTc1,dtFROM#dtsWHEREdt>='20040301'ANDdt<'20040401'或者SELECTc1,dtFROM#dtsWHEREDATEPART(year,dt)=2004ANDDATENAME(month,dt)='March'
解决方案六:
那就是access中没有Convert函数咯