SQL日期函數
SQL日期函數中的類型碼可以為0,1,2,3,4,5,6,7,8,9,10,11,12,13,14
,20,21,22,23,24,25,100,101,102,103,104,105,106,107,108,109,100,
110,111,112,113,114,120,121,126,127,130,131
函數 | 結果 |
---|---|
select CONVERT(varchar(30),getdate(),0) | 09 13 2017 3:51PM |
select CONVERT(varchar(30),getdate(),1) | 09/13/17 |
select CONVERT(varchar(30),getdate(),2) | 17.09.13 |
select CONVERT(varchar(30),getdate(),3) | 13/09/17 |
select CONVERT(varchar(30),getdate(),4) | 13.09.17 |
select CONVERT(varchar(30),getdate(),5) | 13-09-17 |
select CONVERT(varchar(30),getdate(),6) | 13 09 17 |
select CONVERT(varchar(30),getdate(),7) | 09 13, 17 |
select CONVERT(varchar(30),getdate(),8) | 15:51:54 |
select CONVERT(varchar(30),getdate(),9) | 09 13 2017 3:51:54:550PM |
select CONVERT(varchar(30),getdate(),10) | 09-13-17 |
select CONVERT(varchar(30),getdate(),11) | 17/09/13 |
select CONVERT(varchar(30),getdate(),12) | 170913 |
select CONVERT(varchar(30),getdate(),13) | 13 09 2017 15:51:54:550 |
select CONVERT(varchar(30),getdate(),14) | 15:51:54:550 |
select CONVERT(varchar(30),getdate(),20) | 2017-09-13 15:51:54 |
select CONVERT(varchar(30),getdate(),21) | 2017-09-13 15:51:54.550 |
select CONVERT(varchar(30),getdate(),22) | 09/13/17 3:51:54 PM |
select CONVERT(varchar(30),getdate(),23) | 2017-09-13 |
select CONVERT(varchar(30),getdate(),24) | 15:51:54 |
select CONVERT(varchar(30),getdate(),25) | 2017-09-13 15:51:54.550 |
select CONVERT(varchar(30),getdate(),100) | 09 13 2017 3:51PM |
select CONVERT(varchar(30),getdate(),101) | 09/13/2017 |
select CONVERT(varchar(30),getdate(),102) | 2017.09.13 |
select CONVERT(varchar(30),getdate(),103) | 13/09/2017 |
select CONVERT(varchar(30),getdate(),104) | 13.09.2017 |
select CONVERT(varchar(30),getdate(),105) | 13-09-2017 |
select CONVERT(varchar(30),getdate(),106) | 13 09 2017 |
select CONVERT(varchar(30),getdate(),107) | 09 13, 2017 |
select CONVERT(varchar(30),getdate(),108) | 15:51:54 |
select CONVERT(varchar(30),getdate(),109) | 09 13 2017 3:51:54:550PM |
select CONVERT(varchar(30),getdate(),110) | 09-13-2017 |
select CONVERT(varchar(30),getdate(),111) | 2017/09/13 |
select CONVERT(varchar(30),getdate(),112) | 20170913 |
select CONVERT(varchar(30),getdate(),113) | 13 09 2017 15:51:54:550 |
select CONVERT(varchar(30),getdate(),114) | 15:51:54:550 |
select CONVERT(varchar(30),getdate(),120) | 2017-09-13 15:51:54 |
select CONVERT(varchar(30),getdate(),121) | 2017-09-13 15:51:54.550 |
select CONVERT(varchar(30),getdate(),126) | 2017-09-13T15:51:54.550 |
select CONVERT(varchar(30),getdate(),127) | 2017-09-13T15:51:54.550 |
select CONVERT(varchar(30),getdate(),130) | 22 ?? ????? 1438 3:51:54:550P |
select CONVERT(varchar(30),getdate(),131) | 22/12/1438 3:51:54:550PM |
其中,21,25,121效果相同(2017-09-13 15:51:54.550 )。
其中,在select語句中需要獲取固定格式日期時,只需將getdate()替換成需要查找的字段名,需要設置的該字段的別名直接在后面添加即可,
如:select CONVERT(varchar(30), RQ_REQ_DATE, 21) from td.REQ;
查詢結果:
出處:https://blog.csdn.net/Amanda_Yt/article/details/77968559
==================================================================
另外在提供一個和日期相關的函數,方便大家參考。
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
這種方式比使用臨時表分頁效率更高。
出處:https://www.cnblogs.com/Sea1ee/p/5991273.html