⑴ 怎么样将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表示时间段是一点
唉,只想到这个笨办法唉