Sql server日期函數用法



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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM