如何在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中按时间段查询数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 查询中按不同天数分组?

如何在 Laravel 的 DB::Select() 中按变量添加 SQL 查询

如何在 SQL 中按时间顺序计算事件?

在 odbc 数据库中按 DATE 查询选择数据

如何使用 SQL Server 在此查询中按天对结果进行分组?

如何在 Hive SQL 中按日期范围独家加入?