当前位置:首页 » 编程语言 » sqlserver查询时间段
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sqlserver查询时间段

发布时间: 2022-02-08 10:12:57

⑴ 怎么样将sqlServer中的时间段拆分成时间点

可以在查询时,根据时间段进行查询。示例查询7月1号到31日的数据:
select * from 数据库 where 时间段 BETWEEN '20170701' AND '20170731'

⑵ 如何在SQL中按时间段查询数据

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中的日期有一点不一样。

(2)sqlserver查询时间段扩展阅读:

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

⑶ sqlserver 数据库查询一个时间段根据年月日三个字段,注意是三个字段

我刚写了一个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'

⑷ SQLSERVER特定时间段查询

DECLARE @dt DATETIME
DECLARE @dt2 DATETIME
SET @dt = '2008-07-24'
SET @dt2 = DATEADD(day, 1, @dt)

select @dt as dt, @dt2 as dt2

select * from meet_now where meetdate between CONVERT(datetime , @dt, 111 ) and convert(datetime , @dt2, 111 ) order by id

select * from meet_now where DATEDIFF(day, meetdate, @dt) = 0 order by id

⑸ SQLServer的分时间段统计的SQL语句。

没看懂a和b二个表的用途,假设对表a统计。
直接统计比较困难,不过你可以先把日期转换成到最早日期的分钟数,把分钟数除以10求整,得到的新值就是每10分钟一组的了。不过新值需要保存到临时表,再对临时表分组统计。
--按上述分析将a表中的f_time转换为以最早日期为起点的每10分钟一个值的新列,如间隔8分钟,新列值为0,18分钟,新值为1.此列命名为ten,把它们复制到临时表#tj中。
select floor(datediff(mi,(select min(f_time) from a),optime)/10) ten,f_time,f_val from a into #tj where not a is null order by f_time
--对#tj按ten列分组统计,同时显示每组的起始日期好截止日期。
select ten,min(f_time) bg,max(f_time) end,sum(f_val) hj_val from #tj group by ten order by ten
--把临时表删掉
drop table #tj

⑹ SQLserver查询时间的格式

SELECT CAST(DATEPART(yyyy, '2017-2-28 10:44:10') AS VARCHAR(4))
+replicate('0',2-len(cast(month('2017-2-28 10:44:10') as varchar(2)))) + cast(month('2017-2-28 10:44:10') as varchar(2))
+replicate('0',2-len(cast(day('2017-2-28 10:44:10') as varchar(2)))) + cast(day('2017-2-28 10:44:10') as varchar(2))
+replicate('0',2-len(cast(datepart(hh,'2017-2-28 10:44:10') as varchar(2)))) + cast(datepart(hh, '2017-2-28 10:44:10') as varchar(2))
+replicate('0',2-len(cast(datepart(n,'2017-2-28 10:44:10') as varchar(2)))) + cast(datepart(n, '2017-2-28 10:44:10') as varchar(2))
+replicate('0',2-len(cast(datepart(ss,'2017-2-28 10:44:10') as varchar(2)))) + cast(datepart(ss, '2017-2-28 10:44:10') as varchar(2))

⑺ 求sqlserver查询某个时间段的查询方法

select *
from emp
where hiredate between '1-10月-2007' and '1-10月-2008'
因为数据库时间表达方式是这样的 所以取区间的时候必须这么写

⑻ 如何用SQL语句查询SQLserver一个表中某个时间段内所有整点时间的值

使用datename函数来取时间中分钟的值。因为整点,都是0分钟。

例:select datename(n,getdate()) 整点则返回 0
需要注意取分钟的参数是n,而不是minute的缩写m,因为月份month的缩写也是m。

⑼ sqlserver的datetime查询

SELECT COUNT(*)/datediff(hour,'2009-06-15 00:00:00','2009-06-28 00:00:00')
from a
where b >= '2009-06-15 00:00:00'and b <= '2009-06-28 00:00:00'

如上是查询6月15日到28日期间,平均每小时记录的数据数目

datediff(hour,'2009-06-15 00:00:00','2009-06-28 00:00:00' --取得日期区间的小时数

------------------------------------------
哦,是我读题不仔细唉,呵呵。
这样的话就复杂了。
你不急的话我明天有空写个预存程序来解决这个问题

------------------------------------------
1.先建立日期时间构造预存程序,用来传回作时间段查询的两个时间
create PROC [dbo].[sp_fordate]
@year char(4),
@month char(2),
@day char(2),
@hour char(2),
@date1 varchar(12) output,
@date2 char(20) output,
@date3 char(20) output
as
begin
set @date1 = @year + '-' + ltrim(rtrim(@month)) + '-' +rtrim(@day)
set @date2 = @date1 + space(1) + ltrim(rtrim(@hour)) + ':00:00'
set @hour = @hour +1
set @date3 = @date1 + space(1) + ltrim(rtrim(@hour)) + ':00:00'
set @hour = @hour -1
set @date1 = @date1 + '-'+ @hour
end

2.在这一个预存程序里用循环跑出一个用union关联的超长sql语句执行。需要传入四个值,年份(2009四位格式),月份,日期(若日期传入为空自动取1),小时(输入1表示1点到2点时段,以此类推)

create proc riqi
@year char(4),
@month char(2),
@day char(2),
@hour char(2)
as
BEGIN
declare @SQL varChar(4000)
if @day is null or @day = ''
begin
set @day = 1
end
declare @date1 char(12)
declare @date2 char(20)
declare @date3 char(20)
exec sp_fordate @year,@month,@day,@hour,@date1 output,@date2 output,@date3 output
set @sql = 'select count(*) as 数目, '''+ @date1 + ''' as 日期时间 from a where b >= ''' + @date2 + '''' + ' and b<= ''' + @date3 + ''''
set @day = @day + 1
while @day <= 31
BEGIN
exec sp_fordate @year,@month,@day,@hour,@date1 output,@date2 output,@date3 output
set @sql = @sql +char(10)+char(13)+ ' union all ' +char(10)+char(13)+ 'select count(*), '''+ @date1 + ''' from a where b >= ''' + @date2 + '''' + ' and b<= ''' + @date3 + ''''
set @day = @day + 1
print @day
if @@error <> ''
BEGIN
break
END
ELSE
CONTINUE
END
exec(@sql)
END

测试结果如下

数目 日期时间
----------- ------------
3 2009-10-1-1
2 2009-10-2-1
1 2009-10-3-1

最后的-1表示时间段是一点

唉,只想到这个笨办法唉