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
這種方式比使用臨時表分頁效率更高。