SqlServer時間日期處理函數及字符串轉換

簡單介紹 web

 

Sql Server中的日期與時間函數 
1.  當前系統日期、時間 
    select getdate()   sql

2. dateadd  在向指定日期加上一段時間的基礎上,返回新的 datetime 值
   例如:向日期加上2天 
   select dateadd(day,2,'2004-10-15')  --返回:2004-10-17 00:00:00.000 數據庫

3. datediff 返回跨兩個指定日期的日期和時間邊界數。
   select datediff(day,'2004-09-01','2004-09-18')   --返回:17 ide

4. datepart 返回表明指定日期的指定日期部分的整數。
  SELECT DATEPART(month, '2004-10-15')  --返回 10 函數

5. datename 返回表明指定日期的指定日期部分的字符串
   SELECT datename(weekday, '2004-10-15')  --返回:星期五 spa

6. day(), month(),year() --能夠與datepart對照一下 server

select 當前日期=convert(varchar(10),getdate(),120) 
,當前時間=convert(varchar(8),getdate(),114) blog

select datename(dw,'2004-10-15') 字符串

select 本年第多少周=datename(week,'2004-10-15')
      ,今天是周幾=datename(weekday,'2004-10-15') get

函數 參數/功能
GetDate( ) 返回系統目前的日期與時間
DateDiff (interval,date1,date2) 以interval 指定的方式,返回date2 與date1兩個日期之間的差值 date2-date1
DateAdd (interval,number,date) 以interval指定的方式,加上number以後的日期
DatePart (interval,date) 返回日期date中,interval指定部分所對應的整數值
DateName (interval,date) 返回日期date中,interval指定部分所對應的字符串名稱

參數 interval的設定值以下:

縮 寫(Sql Server) (Access 和 ASP) 說明
Year Yy yyyy 年 1753 ~ 9999
Quarter Qq q   季 1 ~ 4
Month Mm m   月1 ~ 12
Day of year Dy y 一年的日數,一年中的第幾日 1-366
Day Dd d   日,1-31
Weekday Dw w 一週的日數,一週中的第幾日 1-7
Week Wk ww 周,一年中的第幾周 0 ~ 51
Hour Hh h   時0 ~ 23
Minute Mi n 分鐘0 ~ 59
Second Ss s 秒 0 ~ 59
Millisecond Ms - 毫秒 0 ~ 999

access 和 asp 中用date()和now()取得系統日期時間;其中DateDiff,DateAdd,DatePart也同是能用於Access和asp中,這些函數的用法也相似

舉例:
1.GetDate() 用於sql server :select GetDate()

2.DateDiff('s','2005-07-20','2005-7-25 22:56:32')返回值爲 514592 秒
DateDiff('d','2005-07-20','2005-7-25 22:56:32')返回值爲 5 天

3.DatePart('w','2005-7-25 22:56:32')返回值爲 2 即星期一(週日爲1,週六爲7)
DatePart('d','2005-7-25 22:56:32')返回值爲 25即25號
DatePart('y','2005-7-25 22:56:32')返回值爲 206即這一年中第206天
DatePart('yyyy','2005-7-25 22:56:32')返回值爲 2005即2005年

 

 

Convert函數的詳細用處                                                                            

Sql Server 中一個很是強大的日期格式化函數
Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06
Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16
Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06
Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06
Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06
Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06
Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06
Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46
Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06
Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16
Select CONVERT(varchar(100), GETDATE(), 12): 060516
Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937
Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967
Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157
Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM
Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47
Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006
Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16
Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006
Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006
Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006
Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006
Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006
Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49
Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM
Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006
Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16
Select CONVERT(varchar(100), GETDATE(), 112): 20060516
Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513
Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547
Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49 
Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700
Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827
Select CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427 10:57:49:907AM
Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM
經常使用:
Select CONVERT(varchar(100), GETDATE(), 8): 10:57:46
Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47
Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49
Select CONVERT(varchar(100), GETDATE(), 12): 060516
Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16

 

 

 

基本的處理和知識                                                                                                    

1.一個月第一天的 
複製  保存Select DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
2.本週的星期一 
複製  保存Select DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
3.一年的第一天 
複製  保存Select DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
4.季度的第一天 
複製  保存Select DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
5.當天的半夜 
複製  保存Select DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)
6.上個月的最後一天 
複製  保存Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
7.去年的最後一天 
複製  保存Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
8.本月的最後一天 
複製  保存Select dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
9.本年的最後一天 
複製  保存Select dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
10.本月的第一個星期一 
複製  保存select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)

 

返回當前日期和時間

經過函數GETDATE(),你能夠得到當前的日期和時間。函數GETDATE()能夠用來做爲DATEDIME型字段的缺省值。這對插入記錄時保 存當時 的時間是有用的。要創建一個表,其中的記錄包含有當前的日期和時間,能夠添加一個DATETIME型字段,指定其缺省值爲函數GETDATE()的返回 值,就象這樣: 
複製  保存Create TABLE site_log (
username VARCHAR(40),
useractivity VARCHAR(100),
entrydate DATETIME DEFAULT GETDATE())
轉換日期和時間convert()函數                                                                      

函數GETDATE()的返回值在顯示時只顯示到秒。實際上,SQL Sever內部時間能夠精確到毫秒級(確切地說,能夠精確到3.33毫秒)。

要獲得不一樣格式的日期和時間,你須要使用函數CONVERT() 。例如,當下面的這個語句執行時,顯示的時間將包括毫秒: 
複製  保存Select CONVERT (VARCHAR(30),GETDATE(),9)
注意例子中數字9的使用。這個數字指明瞭在顯示日期和時間時使用哪一種日期和時間格式。當這個語句執行時,將顯示以下的日期和時間: 
輸出窗口 複製  保存  
Nov 30 1997 3:29:55:170AM 
(1 row(s) affected)
在函數CONVERT()中你可使用許多種不一樣風格的日期和時間格式。下表顯示了全部的格式。 
日期和時間的類型: 
複製  保存類型值 標準 輸出 
0 Default mon dd yyyy hh:miAM 
1 USA mm/dd/yy 
2 ANSI yy.mm.dd 
3 British/French dd/mm/yy 
4 German dd.mm.yy 
5 Italian dd-mm-yy 
6 - dd mon yy 
7 - mon dd,yy 
8 - hh:mi:ss 
9 Default + milliseconds--mon dd yyyy 
hh:mi:ss:mmmAM(or ) 
10 USA mm-dd-yy 
11 JAPAN yy/mm/dd 
12 ISO yymmdd 
13 Europe Default + milliseconds--dd mon yyyy 
hh:mi:ss:mmm(24h) 
14 - hh:mi:ss:mmm(24h)
類型0,9,和13老是返回四位的年。對其它類型,要顯示世紀,把style值加上100。類型13和14返回24小時時鐘的時間。類型0,7,和13返回的月份用三位字符表示(用Nov表明November).

對錶中所列的每一種格式,你能夠把類型值加上100來顯示有世紀的年(例如,00年將顯示爲2000年)。例如,要按日本標準顯示日期,包括世紀,你應使用以下的語句: 
複製  保存Select CONVERT(VARCHAR(30), GETDATE(),111)
在這個例子中,函數CONVERT()把日期格式進行轉換,顯示爲1997/11/30

抽取日期和時間

在許多狀況下,你也許只想獲得日期和時間的一部分,而不是完整的日期和時間。爲了抽取日期的特定部分,你可使用函數DATEPART(),象這樣: 
複製  保存Select site_name 'Site Name',
DATEPART(mm,site_entrydate) 'Month Posted' FROM site_directory
函數DATEPART()的參數是兩個變量。第一個變量指定要抽取日期的哪一部分;第二個變量是實際的數據。在這個例子中,函數DATEPART()抽取月份,由於mm表明月份。下面是這個Select 語句的輸出結果: 
輸出窗口 複製  保存  
Site Name Month Posted 
……………………………………………………………… 
Yahoo 2 
Microsoft 5 
Magicw3 5 
(3 row(s) affected)
Month Posted列顯示了每一個站點被查詢的月份。函數DATEPART()的返回值是一個整數。你能夠用這個函數抽取日期的各個不一樣部分,以下表所示。

日期的各部分及其簡寫 
複製  保存日期部分 簡寫 值 
year yy 1753--9999 
quarter qq 1--4 
month mm 1--12 
day of year dy 1--366 
day dd 1--31 
week wk 1--53 
weekday dw 1--7(Sunday--Saturday) 
hour hh 0--23 
minute mi 0--59 
second ss 0--59 
milisecond ms 0--999
當你須要進行日期和時間的比較時,使用函數DATEPART()返回整數是有用的。可是,上例中的查詢結果(2,5)不是十分易讀。要以更易讀的格式獲得部分的日期和時間,你可使用函數DATENAME(),以下例所示: 
複製  保存Select site_name 'Site Name'
DATENAME(mm,site_entrydate) 'Month Posted'
FROM site_directory
函數DATENAME()和函數DATEPART()接收一樣的參數。可是,它的返回值是一個字符串,而不是一個整數。下面是上例該用DATENAME()獲得的結果: 
輸出窗口 複製  保存  
Site Name Month Postec 
…………………………………………………………………. 
Yahoo February 
Microsoft June 
Magicw3 June 
(3 row(s) affected)
你也能夠用函數DATENAE()來抽取一個星期中的某一天。下面的這個例子同時抽取一週中的某一天和日期中的月份: 
複製  保存Select site_name 'Site Name',
DATENAME(dw,site_entrydate)+ '-' + DATENAME(mm,site_entrydate)
'Day and Month Posted' FORM site_directory
這個例子執行時,將返回以下的結果: 
輸出窗口 複製  保存  
Site Name Day and Month Posted 
……………………………………………………………………… 
Yahoo Friday - February 
Microsoft Tuesday - June 
Magicw3 Monday - June 
(3 row(s) affected)
返回日期和時間範圍

當你分析表中的數據時,你也許但願取出某個特定時間的數據。你也許對特定的某一天中――好比說2000年12月25日――訪問者在你站點上的活動感興趣。要取出這種類型的數據,你也許會試圖使用這樣的Select語句: 
複製  保存Select * FROM weblog Where entrydate='12/25/20000'
不要這樣作。這個Select語句不會返回正確的記錄――它將只返回日期和時間是12/25/2000 12:00:00:000AM的記錄。換句話說,只有恰好在午夜零點輸入的記錄才被返回。

問題是SQL Sever將用完整的日期和時間代替部分日期和時間。例如,當你輸入一個日期,但不輸入時間時,SQL Sever將加上缺省的時間「12:00:00:000AM」。當你輸入一個時間,但不輸入日期時,SQL Sever將加上缺省的日期「Jan 1 1900」。

要返回正確的記錄,你須要適用日期和時間範圍。有不止一種途徑能夠作到這一點。例如,下面的這個Select 語句將能返回正確的記錄: 
複製  保存Select * FROM weblog 
Where entrydate>='12/25/2000' AND entrydate<'12/26/2000'
這個語句能夠完成任務,由於它選取的是表中的日期和時間大於等於12/25/2000 12:00:00:000AM並小於12/26/2000 12:00:00:000AM的記錄。換句話說,它將正確地返回2000年聖誕節這一天輸入的每一條記錄。

另外一種方法是,你可使用LIKE來返回正確的記錄。經過在日期表達式中包含通配符「%」,你能夠匹配一個特定日期的全部時間。這裏有一個例子: 
複製  保存Select * FROM weblog Where entrydate LIKE 'Dec 25 2000%'
這個語句能夠匹配正確的記錄。由於通配符「%」表明了任什麼時候間。

使用這兩種匹配日期和時間範圍的函數,你能夠選擇某個月,某一天,某一年,某個小時,某一分鐘,某一秒,甚至某一毫秒內輸入的記錄。可是,若是你使 用 LIKE 來匹配秒或毫秒,你首先須要使用函數CONVERT()把日期和時間轉換爲更精確的格式(參見前面「轉換日期和時間」一節)。

比較日期和時間

最後,還有兩個日期和時間函數對根據日期和時間取出記錄是有用的。使用函數DATEADD()和DATEDIFF(),你能夠比較日期的遲早。例如,下面的Select語句將顯示錶中的每一條記錄已經輸入了多少個小時: 
複製  保存Select entrydate 'Time Entered'
DATEDIFF(hh,entrydate,GETDATE()) 'Hours Ago' FROM weblog
若是當前時間是2000年11月30號下午6點15分,則會返回以下的結果: 
輸出窗口 複製  保存  
Time Entered Hours Ago 
………………………………………………….. 
Dec 30 2000 4:09PM 2 
Dec 30 2000 4:13PM 2 
Dec 1 2000 4:09PM 698 
(3 row(s) affected)
函 數DADEDIFF()的參數是三個變量。第個變量指定日期的某一部分。在這個例子中,是按 小時對日期進行比較,(要了解日期各部分的詳細內容,請參考表11.2)在日期2000年11月1日和2000年11月30日的指定時間之間有689個小 時。另外兩個參數是要進行比較的時間。爲了返回一個正數,較早的時間應該先給。

函數DATEADD()把兩個日期相加。當你須要計算截止日期這一類的數據時,這個函數是有用處的。假如你要查詢一個月前註冊用戶的記錄,你可使用以下的Select語句: 
複製  保存Select username 'User Name',
DATEADD(mm,1,firstvisit_date) 'Registration Expires'
FROM registration_table
函 數DATEADD()的參數有三個變量。第一個變量表明日期的某一部分,這個例子用到了表明 月份的mm。第二個變量指定了時間的間隔――在本例中是一個月。最後一個變量是一個日期,在這個例子中,日期是取自DATETIME型字段 firstvisit_date.假設當前日期是June 30,2000,這個語句將返回以下的內容: 
輸出窗口 複製  保存  
User Name Registration Expires 
…………………………………………………………………………… 
Bill Gates Jul 30 2000 4:09PM 
President Clinton Jul 30 2000 4:13PM 
William Shakespeare Jul 1 2000 4:09PM 
(3 row(s) affected)
注意: 
使用函數DATEADD()把一個日期加上一個月,它並不加上30天。這個函數只簡單地把月份值加1。

SQL Server裏面可能常常會用到的日期格式轉換方法:  
舉例以下: 
複製  保存select CONVERT(varchar, getdate(), 120 ) 
--2004-09-12 11:06:08

select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','') 
--20040912110608

select CONVERT(varchar(12) , getdate(), 111 ) 
--2004/09/12

select CONVERT(varchar(12) , getdate(), 112 ) 
--20040912

select CONVERT(varchar(12) , getdate(), 102 ) 
--2004.09.12

select CONVERT(varchar(12) , getdate(), 101 ) 
--09/12/2004

select CONVERT(varchar(12) , getdate(), 103 ) 
--12/09/2004

select CONVERT(varchar(12) , getdate(), 104 ) 
--12.09.2004

select CONVERT(varchar(12) , getdate(), 105 ) 
--12-09-2004

select CONVERT(varchar(12) , getdate(), 106 ) 
--12 09 2004

select CONVERT(varchar(12) , getdate(), 107 ) 
--09 12, 2004

select CONVERT(varchar(12) , getdate(), 108 ) 
--11:06:08

select CONVERT(varchar(12) , getdate(), 109 ) 
--09 12 2004 1

select CONVERT(varchar(12) , getdate(), 110 ) 
--09-12-2004

select CONVERT(varchar(12) , getdate(), 113 ) 
--12 09 2004 1

select CONVERT(varchar(12) , getdate(), 114 ) 
--11:06:08.177

***得到當天時間***數據庫是util類型***

 select  count(*) FROM QueryInfo_Weibo WHERE 1=1 and convert(varchar(10),W_CretateTime,20)='2012-08-01' ;

相關文章
相關標籤/搜索