表:table1 字段:time(datetime)
表中的记录为一分钟一条记录,
2005-1-8 22:50:00
2005-1-8 22:51:00
2005-1-8 22:53:00 ............
问题:每小时的第一条记录取出来,
参考:按小时分组,(22时,23时,0时)每小时的第一条记录取出来
搂主说得不是太明白,你是要取第一条记录所对应的那个时间吗?
如果是的话,用如下语句即可。
select min(time)
from table1
group by convert(varchar(13),time,20)
假设Table1表中数据如下
2006-05-01 11:01:00.000
2006-05-01 11:02:00.000
2006-05-01 12:02:00.000
2006-05-02 12:02:00.000
2006-05-02 12:01:00.000
查询结果为:
2006-05-01 11:01:00.000
2006-05-01 12:02:00.000
2006-05-02 12:01:00.000
对应的都是每小时中最早的那一条时间。
convert(varchar(13),time,20)
的意思是将time字段转换成字符串形式,convert的第三个参数,取值20是将时间转换成yyyy-mm-dd hh:mm:ss的形式。由于限定了是转换成长度为13的字符串,所以转换后就会取时间字符串的前13位yyyy-mm-dd hh
如果是的话,用如下语句即可。
select min(time)
from table1
group by convert(varchar(13),time,20)
假设Table1表中数据如下
2006-05-01 11:01:00.000
2006-05-01 11:02:00.000
2006-05-01 12:02:00.000
2006-05-02 12:02:00.000
2006-05-02 12:01:00.000
查询结果为:
2006-05-01 11:01:00.000
2006-05-01 12:02:00.000
2006-05-02 12:01:00.000
对应的都是每小时中最早的那一条时间。
convert(varchar(13),time,20)
的意思是将time字段转换成字符串形式,convert的第三个参数,取值20是将时间转换成yyyy-mm-dd hh:mm:ss的形式。由于限定了是转换成长度为13的字符串,所以转换后就会取时间字符串的前13位yyyy-mm-dd hh
温馨提示:答案为网友推荐,仅供参考
第1个回答 2006-05-11
可以用transact-sql 的like语句。
transact-sql 参考
like
确定给定的字符串是否与指定的模式匹配。模式可以包含常规字符和通配符字符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。然而,可使用字符串的任意片段匹配通配符。与使用 = 和 != 字符串比较运算符相比,使用通配符可使 like 运算符更加灵活。如果任何参数都不属于字符串数据类型,microsoft® sql server™ 会将其转换成字符串数据类型(如果可能)。
语法
match_expression [ not ] like pattern [ escape escape_character ]
参数
match_expression
任何字符串数据类型的有效 sql server 表达式。
pattern
match_expression 中的搜索模式,可以包含下列有效 sql server 通配符。
% 包含零个或更多字符的任意字符串。 where title like ''%computer%'' 将查找处于书名任意位置的包含单词 computer 的所有书名。
_(下划线) 任何单个字符。 where au_fname like ''_ean'' 将查找以 ean 结尾的所有 4 个字母的名字(dean、sean 等)。
[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。 where au_lname like ''[c-p]arsen'' 将查找以arsen 结尾且以介于 c 与 p 之间的任何单个字符开始的作者姓氏,例如,carsen、larsen、karsen 等。
[^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。 where au_lname like ''de[^l]%'' 将查找以 de 开始且其后的字母不为 l 的所有作者的姓氏。
escape_character
字符串数据类型分类中的所有数据类型的任何有效 sql server 表达式。escape_character 没有默认值,且必须仅包含一个字符。
结果类型
boolean
结果值
如果 match_expression 匹配指定模式,like 将返回 true。
因此,按照你说的问题,(此处把日期定为2005-1-8,可以变量代替任意日期)
String pat="2005-1-8 "+"\''__:00:00''";
String sql="select * from table1 where time like "+pat;
我没有测试,不知道可不可以
transact-sql 参考
like
确定给定的字符串是否与指定的模式匹配。模式可以包含常规字符和通配符字符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。然而,可使用字符串的任意片段匹配通配符。与使用 = 和 != 字符串比较运算符相比,使用通配符可使 like 运算符更加灵活。如果任何参数都不属于字符串数据类型,microsoft® sql server™ 会将其转换成字符串数据类型(如果可能)。
语法
match_expression [ not ] like pattern [ escape escape_character ]
参数
match_expression
任何字符串数据类型的有效 sql server 表达式。
pattern
match_expression 中的搜索模式,可以包含下列有效 sql server 通配符。
% 包含零个或更多字符的任意字符串。 where title like ''%computer%'' 将查找处于书名任意位置的包含单词 computer 的所有书名。
_(下划线) 任何单个字符。 where au_fname like ''_ean'' 将查找以 ean 结尾的所有 4 个字母的名字(dean、sean 等)。
[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。 where au_lname like ''[c-p]arsen'' 将查找以arsen 结尾且以介于 c 与 p 之间的任何单个字符开始的作者姓氏,例如,carsen、larsen、karsen 等。
[^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。 where au_lname like ''de[^l]%'' 将查找以 de 开始且其后的字母不为 l 的所有作者的姓氏。
escape_character
字符串数据类型分类中的所有数据类型的任何有效 sql server 表达式。escape_character 没有默认值,且必须仅包含一个字符。
结果类型
boolean
结果值
如果 match_expression 匹配指定模式,like 将返回 true。
因此,按照你说的问题,(此处把日期定为2005-1-8,可以变量代替任意日期)
String pat="2005-1-8 "+"\''__:00:00''";
String sql="select * from table1 where time like "+pat;
我没有测试,不知道可不可以
参考资料:
第2个回答 2006-05-11
就查询time字段里面分和秒为0的~~然后在按升序排列~~~
这个字段既然是日期时间类型那就可以用分、秒函数(你的记录)来获得分、秒值不过这个函数就要看你用的什么语言了
这个字段既然是日期时间类型那就可以用分、秒函数(你的记录)来获得分、秒值不过这个函数就要看你用的什么语言了
第3个回答 2006-05-11
应该用触发器来解决这问题吧
第4个回答 2006-05-11
好复杂啊~~看不懂~~用Access啊~