sqlserver 数据库查询一个时间段根据年月日三个字段,注意是三个字段
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver 数据库查询一个时间段根据年月日三个字段,注意是三个字段相关的知识,希望对你有一定的参考价值。
因为每天的数据量有点大,用查询速度最快的方法写sql语句查询2016年7月1日到2017年5月1日数据
我刚写了一个mysql的类似sql查询。
1、将年、月、日和小时组合成一个字符串
2、月日时如果不是两位,在前面补0
3、将字符和判断区间的字符串值进行比较
select * from 表 where CONCAT(vyear
,LPAD(vmonth
,2,0),LPAD(vday,2,0),LPAD(Hour,2,0)) >= '2017081000' and CONCAT(vyear,LPAD(vmonth,2,0),LPAD(vday,2,0),LPAD(Hour,2,0)) <= '2017081023'
那就先转字符型再拼接
参考技术B select xxx from tbl where (vyear=2016 and vmonth>=7) or (vyear=2017 and vmonth<5)本回答被提问者采纳mysql 根据起止年月 查询所选年月的数据
1、时间字段是datetime类型
2、需要用到中间表,表结构和数据链接下载
链接:https://pan.baidu.com/s/1tAFU4nm1p4CkSneXwceA_A
提取码:b3xi
3、前两个 adddate 日需要在代码中写死 从每日的-01开始,-最后一个日期同理xxxx-xx-31
4、sql
select bri.orgid, years.date, date_format(years.date, \'%Y-%m\') AS years, bri.entrytime a, sum( case when bri.status = \'1\' then 1 else 0 end ) as num, sum( case when bri.status = \'1\' and bri.sex=\'1\' then 1 else 0 end ) as numman, sum( case when bri.status = \'1\' and bri.sex=\'2\' then 1 else 0 end ) as numgrid from ( select adddate(\'2018-10-01\', INTERVAL numlist.id month) as \'date\', numlist.id from ( select n100.i * 1 as id from num as n100 ) as numlist where adddate(\'2018-10-01\', INTERVAL numlist.id month) <= \'2019-05-31\' ) years left join building_resident_info bri on date_format(years.date, \'%Y-%m\') = date_format(bri.entrytime, \'%Y-%m\') and bri.status=\'1\' and bri. status = \'1\' and bri.orgid like concat(\'37.02.82\', \'%\') group by years.date
5、结果
如有疏漏,请指正!谢谢。
以上是关于sqlserver 数据库查询一个时间段根据年月日三个字段,注意是三个字段的主要内容,如果未能解决你的问题,请参考以下文章
SQLServer数据库查询时间段如2013-1-1到2013-12-31出现2-9月数据漏掉,将其排序发现1月中间嵌入11月数据