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'

参考技术A 3个字段是字符型还是数值?把3个字段拼成date或datetime型,再与时间段比较。追答

那就先转字符型再拼接

参考技术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月数据

SQLSERVER 根据身份证号码 往出生年月日 赋值

mysql 根据起止年月 查询所选年月的数据

关于sqlserver的时间输出与类型转化问题问题

SQL中按日期进行查询,如何截取日期进行查询

在SqlServer2000中怎么确定时间的类型