huyulong 发表于 2008-1-9 08:37:13

再谈--SQL实现数据库某时间段内的时间间隔查询

再谈--SQL数据库某时间段内的时间间隔查询!

谢谢lgh269和Labc的帮助!

我把程序和数据库附上,请各位大侠不吝指教!多谢。

我在数据库查询中,实现任意一段时间内,间隔任意一时间段查询数据。比如2008-1-3 13:47:00至2008-1-3 13:55:00之间的时间,查询间隔2分钟的数据,
既查询13:47:00、13:49:00、13:51:00、13:53:00、13:55:00时间对应的数据。


2008-1-3 13:46:27      235.1
2008-1-3 13:46:37      235.2
2008-1-3 13:46:46      235.2
2008-1-3 13:46:55      235.1
2008-1-3 13:47:04      235.1
2008-1-3 13:47:13      235.1
2008-1-3 13:47:23      235.2
2008-1-3 13:47:32      235.2
2008-1-3 13:47:41      235.2
2008-1-3 13:47:50      235.2
2008-1-3 13:47:59      235.1
2008-1-3 13:48:08      235.1
2008-1-3 13:48:17      235.2
2008-1-3 13:48:27      235.2
2008-1-3 13:48:37      235.4
2008-1-3 13:48:46      235.4
2008-1-3 13:48:58      235.4
2008-1-3 13:49:37      235.4
2008-1-3 13:49:46      235.4
2008-1-3 13:49:58      235.4
2008-1-3 13:50:35      235.4
2008-1-3 13:50:44      235.2
2008-1-3 13:50:53      235.5
2008-1-3 13:51:03      235.5
2008-1-3 13:51:13      235.5
2008-1-3 13:51:23      235.4
2008-1-3 13:51:32      235.2
2008-1-3 13:51:43      235.2
2008-1-3 13:51:53      235.1
2008-1-3 13:52:04      235.1
2008-1-3 13:52:15      235.4
2008-1-3 13:52:28      235.2
2008-1-3 13:52:39      235.1
2008-1-3 13:52:50      234.7
2008-1-3 13:53:01      234.5
2008-1-3 13:53:12      234.7
2008-1-3 13:53:23      234.6
2008-1-3 13:53:35      234.7
2008-1-3 13:53:46      234.9
2008-1-3 13:54:37      235.4
2008-1-3 13:54:46      235.4
2008-1-3 13:54:58      235.4
2008-1-3 13:55:37      235.4
2008-1-3 13:55:46      235.4
2008-1-3 13:55:58      235.4
2008-1-3 13:56:50      234.9
2008-1-3 13:57:37      235.4
2008-1-3 13:57:46      235.4
2008-1-3 13:57:58      235.4

huyulong 发表于 2008-1-9 08:44:02

数据库的密码是:123

labc 发表于 2008-1-9 20:27:13

SELECT DoeSQL_table001.TDataTime as AAA
FROM DoeSQL_table001
WHERE (((TDataTime)>#12/25/2007 8:10:52#) AND ((TDataTime)<#12/25/2007 8:20:52#));

或
SELECT DoeSQL_table001.TDataTime as AAA
FROM DoeSQL_table001
WHERE (TDataTime Between #12/25/2007 8:10:52# AND #12/25/2007
8:12:52#);

或
SELECT TDataTime as AAA
FROM DoeSQL_table001
WHERE (((TDataTime)>#12/25/2007 8:10:52#) AND ((TDataTime)<#12/25/2007 8:20:52#));

或
SELECT TDataTime as AAA
FROM DoeSQL_table001
WHERE (TDataTime Between #12/25/2007 8:10:52# AND #12/25/2007
8:12:52#);

Access查询子句为时间时,时间字符串前后必须加#且数据必须以日期时间格式储存在Access文件中,可以使用比较运算符和Between... AND语句,个人喜欢用后一种方法.
以上语句我试了,以上语句不管是美国时间格式还是中国时间格式在我的电脑上均可正常运行.如果不能正常运行,请将你电脑时间格式改为美国格式.

Labc

[ 本帖最后由 labc 于 2008-1-9 20:44 编辑 ]

huyulong 发表于 2008-1-10 09:38:33

非常感谢LABC!
你说的几种方法都可以查询,
但是时间可以查询显示,时间对应的数据为啥不能显示?
我对数据库的知识基本是零,没有找出原因.还请你多指教!
对于数据库的知识Micosoft Access和SQL2000,看哪方面的资料入手比较合适.请你指教.谢谢!!

huyulong 发表于 2008-1-10 09:53:57

还有,时间间隔好处理吗?如2分钟,做近似处理就可以呀!

labc 发表于 2008-1-10 14:45:48

时间对应的数据没有放到语句里啊,如果对应的数据名称叫Data,
语句为:
SELECT TDataTime,Data as AAA
FROM DoeSQL_table001
WHERE (TDataTime Between #12/25/2007 8:10:52# AND #12/25/2007
8:12:52#);

网上有,很多,自己搜一下.

Labc

[ 本帖最后由 labc 于 2008-1-10 14:47 编辑 ]

huyulong 发表于 2008-1-10 15:06:35

可以了能够显示了,谢谢!
你能指教一下时间间隔的处理吗!!

labc 发表于 2008-1-10 15:21:37

这要看你想要的数据是什么了,按你的要求是间隔2分钟,例如参考时间是13:47:00,再过2分钟应该是13:49:00,但是这个时间点没有数据怎么办?
你可能会:
1,时间模糊处理,例如在2分钟的基础上上下浮动10S,然后取最接近2分钟的那一条;
2,跳过13:49:00时刻的数据.

第1种做法,SQL语句不变,只需将导出的数据用数组进行处理即可,相信你可以做到哈.

Labc

huyulong 发表于 2008-1-10 15:35:06

谢谢Labc!!
按照你说的思路,以第一种方法就近原则取数,我编编看.
非常感谢你的帮助,谢谢!!

fo925 发表于 2009-9-16 23:06:08

学习了!!

fo925 发表于 2009-9-16 23:06:43

学习了!!

hao123lcm 发表于 2009-9-20 19:45:46

很受用啊

wanshiwch 发表于 2009-9-28 15:15:16

虽然现在没做数据库方面的,但是也学习了,以后肯定会做的。

gongkong168 发表于 2009-10-2 01:09:59

这正是我想要的!谢了!
页: [1]
查看完整版本: 再谈--SQL实现数据库某时间段内的时间间隔查询