標籤:_id data 自動刪除 server 方案 page 解決 select int
getdate()函數:取得系統當前的日期和時間。傳回值為datetime類型的。
用法:getdate()
例子:
select getdate() as dte,dateadd(day,-1,getdate()) as nowdat
datepart()函數:以整數的形式返回時間的指定部分。
用法:datepart(datepart,date)
參數說明:datepart時要返回的時間的部分,常用取值year、month、day、hour、minute、second
date是所指定的時間。
例子:
select datepart(month, getdate()) as‘Month Number‘
dateadd()函數:通過給指定的時間的指定部分加上一個整數值以返回一個新時間值。
用法:dateadd(datepart,number,date)
參數說明:datepart(同上)
date(同上)
number要增加的值,整型,可正可負,正值返回date之後的時間值,負值返回date之前的時間值
例子:
select getdate() as today
select dateadd(day,-1,getdate())
select dateadd(day,1,getdate())
datediff()函數:返回兩個時間以指定時間部分來計算的差值。返回整數值。
如1991-6-12和1991-6-21之間以天來算相差9天,1998-6-12和1999-6-23按年算相差1年,1999-12-1和1999-3-12按月算相差9個月
用法:datediff(darepart,date1,date2)
參數說明:datepart(同上)
date1、date2(同上date)
例子:
select datediff(month,‘1991-6-12‘,‘1992-6-21‘) as a
常用時間函數:
使用時間和日期的函數
getdate():擷取系統目前時間
dateadd(datepart,number,date):計算在一個時間的基礎上增加一個時間後的新時間值,比如:dateadd(yy,30,getdate())
datediff(datepart,startdate,enddate):計算兩個時間的差值,比如:datediff(yy,getdate(),‘2008-08-08‘)
dataname(datepart,date):擷取時間不同部分的值,傳回值為字串
datepart(datepart,date):和datename相似,只是傳回值為整型
day(date):擷取指定時間的天數
month(date):擷取指定時間的月份
year(date):擷取指定時間的年份
SQL Server的幾個分頁解決方案:
解決方案1:
declare @pageIndex int,@pageSize int,@recordNum int
set @pageIndex=3
set @pageSize=3
select top(@pageSize) * from Grade where id not in (select top
((@pageIndex-1)*@pageSize) id from Grade)//顯示出第 7 到 第 9 條
select @recordNum=count(*) from Grade//顯示總記錄數
點評:效率不高,而且取出來的資料是按id排序的。如果想按其他欄位排序就不行。
解決方案二:
declare @id int
--set rowcount 3
--select @id=id from Grade
select top 3 @id=id from Grade//這句等效於上面注視的兩句
select top 3 * form Grade where id>@id//查詢出第 4 到第 6 條記錄
點評:效率比方案一稍高,但是取出來的資料是也按id排序的。如果想按其他欄位排序就不行
解決方案三:
create table #table(new_id int identity(1,1) primary key,id int)
insert into #table(id) select id from grade
select a.* from grade a join #table b on (b.new_id between 6 and 9) and a.id=b.id
//取出第 6 到第 9 條,
點評:其原理是把要分頁的表的主鍵插入到暫存資料表中,暫存資料表的欄位就是一個識別欄位和要分
頁的表的主鍵列(包括是多個主鍵的情況,上面的兩種方法就不行)。特點是效率高,取出
來的資料能根據自己要求的欄位排序。
暫存資料表:
上面的解決方案三就是使用了暫存資料表,它與永久表相似,但暫存資料表儲存在 tempdb 中,當不
再使用時會自動刪除。
暫存資料表有兩種類型:本地和全域。它們在名稱、可見度以及可用性上有區別。本地暫存資料表
的名稱以單個數字記號 (#) 打頭;它們僅對當前的使用者串連是可見的;當使用者從 SQL Server
執行個體中斷連線時被刪除。全域暫存資料表的名稱以兩個數字記號 (##) 打頭,建立後對任何使用者
都是可見的,當所有引用該表的使用者從 SQL Server 中斷連線時被刪除。
表級變數:
象上面分頁的例子也可以使用表級變數,象下面這樣:
declare @table table (newid int identiey(1,1),id int)
insert into @table(id) select id from grade
select a.* from grade a join @table b on (b.new_id between 6 and 9) and a.id=b.id
這種方式比使用暫存資料表分頁效率更高。
SQL Server 系統時間