如何在SQL中按时间段查询数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在SQL中按时间段查询数据相关的知识,希望对你有一定的参考价值。
每条记录中有一个“发生日期”的字段,格式为“yyyy-mm-dd”格式,现在想做以下查询
1、查询“发生日期”为2008-07-01至2008-12-31这段时间内的数据;
2、查询“发生日期”为2009-01-01至2009-01-17这段时间内的数据.
谢谢大家了。
sql server:
select * from 表 where 发生日期>'2008-7-1' and 发生日期<'2008-12-31'
access:
select * from 表 where 发生日期>#2008-7-1# and 发生日期<#2008-12-31#
这样就可以了,注意sql server与access中的日期有一点不一样。
扩展资料:
sql查询日期语句
select * from ShopOrder where datediff(week,ordTime,getdate()-1)=0 //查询当天日期在一周年的数据
select * from ShopOrder where datediff(day,ordTime,getdate()-1)=0 //查询当天的所有数据
SELECT * FROM A where datediff(d,datetime,getdate()) <=30 //前30天
SELECT * FROM A WHERE DATEDIFF(m, shijian, GETDATE()) <=1 // 上一月
查询当天记录另类的方法:
SELECT *
FROM j_GradeShop
WHERE (GAddTime BETWEEN CONVERT(datetime, LEFT(GETDATE(), 10) + ' 00:00:00.000')
AND CONVERT(datetime, LEFT(GETDATE(), 10) + ' 00:00:00.000') + 1)
ORDER BY GAddTime DESC
参考技术A select*
from
ms_cf01
a
where
a.kfrq
between
to_date('20100101
180000','yyyymmdd
hh24miss')
and
to_date('20101231
180000','yyyymmdd
hh24miss')
and
to_char(a.kfrq,'hh24miss')
between
'180000'
and
'240000'
主要用到
to_char,to_date对时间字段的转换方法,具体使用方法可baidu
如果这么查询,主要是第2个条件无法用上索引,所以最好的方式是在涉及表的时候将该字段拆成2个字段
日期
,时间,并用整形表示 参考技术B sql
server与access中的日期有一点不一样,
sql
server:
select
*
from
表
where
发生日期>'2008-7-1'
and
发生日期<'2008-12-31'
access:
select
*
from
表
where
发生日期>#2008-7-1#
and
发生日期<#2008-12-31#
呵呵,希望能有帮助,^_^ 参考技术C sql server:
select * from 表 where 发生日期>'2008-7-1' and 发生日期<'2008-12-31'
access:
select * from 表 where 发生日期>#2008-7-1# and 发生日期<#2008-12-31#
这样就可以了,注意sql server与access中的日期有一点不一样。 参考技术D sql
server:
select
*
from
表
where
发生日期>'2008-7-1'
and
发生日期<'2008-12-31'
access:
select
*
from
表
where
发生日期>#2008-7-1#
and
发生日期<#2008-12-31#
这样就可以了,注意sql
server与access中的日期有一点不一样。
扩展资料:
sql查询日期语句
select
*
from
ShopOrder
where
datediff(week,ordTime,getdate()-1)=0
//查询当天日期在一周年的数据
select
*
from
ShopOrder
where
datediff(day,ordTime,getdate()-1)=0
//查询当天的所有数据
SELECT
*
FROM
A
where
datediff(d,datetime,getdate())
<=30
//前30天
SELECT
*
FROM
A
WHERE
DATEDIFF(m,
shijian,
GETDATE())
<=1
// 上一月
查询当天记录另类的方法:
SELECT
*
FROM
j_GradeShop
WHERE
(GAddTime
BETWEEN
CONVERT(datetime,
LEFT(GETDATE(),
10)
+
'
00:00:00.000')
AND
CONVERT(datetime,
LEFT(GETDATE(),
10)
+
'
00:00:00.000')
+
1)
ORDER
BY
GAddTime
DESC
如何在 SQL 中按时间顺序计算事件?
【中文标题】如何在 SQL 中按时间顺序计算事件?【英文标题】:How do I count events in chronological order in SQL? 【发布时间】:2020-08-04 09:40:15 【问题描述】:我想聚合 Talbe_A 并使其类似于 Table_B。 我很难按照时间顺序来统计事件。 我应该如何编写查询?
Table_A
client_id event time
A view 12:00:00
A view 12:02:00
A view 12:05:00
A purchase 14:02:00
B view 12:04:00
B view 12:07:00
B view 13:20:00
C view 12:00:00
C view 12:07:00
C add_to_cart 14:02:00
C view 14:19:00
C purchase 14:32:00
C view 15:32:00
Table_B
client_id event count
A view 3
A purchase 1
B view 3
C view 3
C add_to_cart 1
C view 1
C purchase 1
C view 1
【问题讨论】:
14:19:00 C 的视图发生了什么变化? 我忘了。我修改了问题。谢谢你。 :) @GordonLinoff 【参考方案1】:这是一个间隙和孤岛问题,您希望将“相邻”行组合在一起。
这里我认为最简单的方法是使用行号之间的差异来定义组:
select client_id, event, count(*) cnt, min(time) start_time, max(time) end_time
from (
select
t.*,
row_number() over(partition by client_id order by time) rn1,
row_number() over(partition by client_id, event order by time) rn2
from mytable t
) t
group by client_id, event, rn1 - rn2
order by client_id, min(time)
Demo on DB Fiddle:
客户 ID |活动 | cnt |开始时间 |时间结束 :-------- | :------------ | --: | :--------- | :-------- 一个 |查看 | 3 | 12:00:00 | 12:05:00 一个 |购买 | 1 | 14:02:00 | 14:02:00 乙|查看 | 3 | 12:04:00 | 13:20:00 C |查看 | 2 | 12:00:00 | 12:07:00 C |添加到购物车 | 1 | 14:02:00 | 14:02:00 C |查看 | 1 | 14:19:00 | 14:19:00 C |购买 | 1 | 14:32:00 | 14:32:00 C |查看 | 1 | 15:32:00 | 15:32:00【讨论】:
以上是关于如何在SQL中按时间段查询数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel 的 DB::Select() 中按变量添加 SQL 查询