QT tablemodel 里,用来查询数据库中一个时间段的内容应该用怎么写啊?model->setFilter()

QT tablemodel 里,用来查询数据库中一个时间段的内容应该用怎么写啊?model->setFilter(),第1张

这个查询用的标准的sql语句即可

"select * from MyTalbe where start_time >= '2018-12-12' AND end_time <= '2019-12-12'"

select * from 表名 where 日期列名 between '开始时间' and '结束时间'

查询字段日期列在开始时间(含)至结束时间(含)之间表名的记录。

SQL SELECT 语句

SELECT 语句用于从表中选取数据。

结果被存储在一个结果表中(称为结果集)。

个人觉得难点在每隔2小时怎么取, 我的方式是取日期(0时0分0秒)然后加上小时数除以2作为标志每2小时的时间间隔(如果时间间隔不是整的小时, 且可以被24整除, 那么尚未想到好的方法)而取前3条记录则有row_number分组函数可以使用.

示例(SQL Server 2005或以上)如下:

declare @tb table (ss int, dt datetime) -- 定义表变量

insert into @tb        -- 插入测试用数据

select 1, '2013/1/20 12:01'

union

select 7, '2013/1/20 12:01'

union

select 3, '2013/1/20 13:21'

union

select 8, '2013/1/20 13:13'

union

select 5, '2013/1/20 12:049'

-- 测试SQL, dt为时间值, hourSpan为分在哪个时间间隔内

select ss, dt, hourSpan

from (

-- 用row_number来按时间间隔分组编号, 且按ss字段升序编号

select ss, row_number() over (partition by convert(nvarchar(10), dt, 120) + '_' + cast(datepart(hour, dt) / 2 as nvarchar(2)) order by ss) as rownumber, dt, convert(nvarchar(10), dt, 120) + '_' + cast(datepart(hour, dt) / 2 as nvarchar(2)) as hourSpan

from @tb

) s

where s.rownumber <= 3 -- 取分组编号值小于等于3的记录

将这个逻辑套用过去, 大概能满足你的需求. 不过, 如果是经常执行这样的查询, 建议建一个字段存此时间间隔值或使用视图, 不然每次查询都有计算, 速度不好.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9685783.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存