⑴ 怎麼樣將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表示時間段是一點
唉,只想到這個笨辦法唉