sql语句的问题,求高手帮忙!!
时间:2011-12-23
来源:互联网
SELECT * FROM Result
WHERE 测量时间 between #03/01/2011 6:30:30# and #03/27/2011 23:45:30#;
我用上面的sql语句检索出的却是是3月1号到3月27号所有日期24小时的数据,我想检索出日期在3月1号到3月27号,同时时间又在6:30:30 and 23:45:30之间的数据应该怎么弄?求高手指导。
WHERE 测量时间 between #03/01/2011 6:30:30# and #03/27/2011 23:45:30#;
我用上面的sql语句检索出的却是是3月1号到3月27号所有日期24小时的数据,我想检索出日期在3月1号到3月27号,同时时间又在6:30:30 and 23:45:30之间的数据应该怎么弄?求高手指导。
作者: fg321 发布时间: 2011-12-23
SELECT * FROM Result
WHERE (测量时间 between #03/01/2011 6:30:30# and #03/27/2011 23:45:30#)
and (convert(varchar,测量时间,8) between #6:30:30# and #23:45:30#)
不知道你那可以用这函数不,试试
WHERE (测量时间 between #03/01/2011 6:30:30# and #03/27/2011 23:45:30#)
and (convert(varchar,测量时间,8) between #6:30:30# and #23:45:30#)
不知道你那可以用这函数不,试试
作者: zx342752854 发布时间: 2011-12-23
带了#你用的是ACCESS数据库吧,LS方法可以,把时间转换成 Short Time再判断一次
作者: wangsunjun 发布时间: 2011-12-23
我使用的时候提示说是convert这个函数未定义,怎么办啊?
作者: fg321 发布时间: 2011-12-23
在SQL中,datetime类型的字段,其时间段检索时,可以采用两种方式来过滤:
1. Between ... And
2. >= 和 <
但是,两者检索的结果相同吗?
比如,检索2010五月份的所有记录,按照上面两种方式,其SQL写法如下:
(DT字段 Between '2010-5-1' And '2010-6-1') 和(DT字段>='2010-5-1' and DT字段<'2010-6-1')
检索结果相信会令人很意外,竟然差别很大。
//-- 创建临时表并初始化数据
CREATE TABLE #dts(c1 char(1), dt datetime)
INSERT INTO #dts (c1, dt) VALUES('a', '20040305 09:12:59')
INSERT INTO #dts (c1, dt) VALUES('b', '20040305 16:03:12')
INSERT INTO #dts (c1, dt) VALUES('c', '20040306 00:00:00')
INSERT INTO #dts (c1, dt) VALUES('d', '20040306 02:41:32')
INSERT INTO #dts (c1, dt) VALUES('e', '20040315 11:45:17')
INSERT INTO #dts (c1, dt) VALUES('f', '20040412 09:12:59')
INSERT INTO #dts (c1, dt) VALUES('g', '20040523 11:43:25')
//-- 检索20040305一整天的数据
SELECT c1, dt FROM #dts WHERE dt BETWEEN '20040305' AND '20040306'
结果:
20040305 09:12:59
20040305 16:03:12
20040306 00:00:00
(怪了,怎么连20040306 00:00:00这条记录也有?)
[原因]:因为Between是包容第二个日期范围的00:00:00记录!
//-- 既然如此,那么第二个日期检索条件改为'20040305 23:59:59.999'
SELECT c1, dt FROM #dts WHERE dt BETWEEN '20040305' AND '20040305 23:59:59.999'
结果:
20040305 09:12:59
20040305 16:03:12
20040306 00:00:00
(真TMD怪,还是有20040306 00:00:00这条记录!!!)
[原因]:因为在datetime日期类型的定义中,"2004-03-05 23:59:59.999" 会被自动舍入"2004-03-06 00:00:00.000"
-----------------------------
此时,可发现Between..And操作基于日期格式的检索,确实够麻烦的!
解决办法:
那就是采用">="和"<"的方式来检索,这样可以避免以上麻烦的操作!
//-- 检索20040305一整天的数据
SELECT c1, dt FROM #dts WHERE dt >= '20040305' AND dt < '20040306'
//-- 检索200403整月的数据
SELECT c1, dt FROM #dts WHERE dt >= '20040301' AND dt < '20040401'
或者
SELECT c1, dt FROM #dts WHERE DATEPART(year, dt) = 2004 AND DATENAME(month, dt) = 'March'
采用这种方式,可以良好的避免数据检索错误!
1. Between ... And
2. >= 和 <
但是,两者检索的结果相同吗?
比如,检索2010五月份的所有记录,按照上面两种方式,其SQL写法如下:
(DT字段 Between '2010-5-1' And '2010-6-1') 和(DT字段>='2010-5-1' and DT字段<'2010-6-1')
检索结果相信会令人很意外,竟然差别很大。
//-- 创建临时表并初始化数据
CREATE TABLE #dts(c1 char(1), dt datetime)
INSERT INTO #dts (c1, dt) VALUES('a', '20040305 09:12:59')
INSERT INTO #dts (c1, dt) VALUES('b', '20040305 16:03:12')
INSERT INTO #dts (c1, dt) VALUES('c', '20040306 00:00:00')
INSERT INTO #dts (c1, dt) VALUES('d', '20040306 02:41:32')
INSERT INTO #dts (c1, dt) VALUES('e', '20040315 11:45:17')
INSERT INTO #dts (c1, dt) VALUES('f', '20040412 09:12:59')
INSERT INTO #dts (c1, dt) VALUES('g', '20040523 11:43:25')
//-- 检索20040305一整天的数据
SELECT c1, dt FROM #dts WHERE dt BETWEEN '20040305' AND '20040306'
结果:
20040305 09:12:59
20040305 16:03:12
20040306 00:00:00
(怪了,怎么连20040306 00:00:00这条记录也有?)
[原因]:因为Between是包容第二个日期范围的00:00:00记录!
//-- 既然如此,那么第二个日期检索条件改为'20040305 23:59:59.999'
SELECT c1, dt FROM #dts WHERE dt BETWEEN '20040305' AND '20040305 23:59:59.999'
结果:
20040305 09:12:59
20040305 16:03:12
20040306 00:00:00
(真TMD怪,还是有20040306 00:00:00这条记录!!!)
[原因]:因为在datetime日期类型的定义中,"2004-03-05 23:59:59.999" 会被自动舍入"2004-03-06 00:00:00.000"
-----------------------------
此时,可发现Between..And操作基于日期格式的检索,确实够麻烦的!
解决办法:
那就是采用">="和"<"的方式来检索,这样可以避免以上麻烦的操作!
//-- 检索20040305一整天的数据
SELECT c1, dt FROM #dts WHERE dt >= '20040305' AND dt < '20040306'
//-- 检索200403整月的数据
SELECT c1, dt FROM #dts WHERE dt >= '20040301' AND dt < '20040401'
或者
SELECT c1, dt FROM #dts WHERE DATEPART(year, dt) = 2004 AND DATENAME(month, dt) = 'March'
采用这种方式,可以良好的避免数据检索错误!
作者: ZeroKiseki 发布时间: 2011-12-23
那就是access中没有Convert函数咯
作者: wangsunjun 发布时间: 2011-12-23
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28