1. 程式人生 > >Sql日期時間格式轉換

Sql日期時間格式轉換

sql server2000中使用convert來取得datetime資料型別樣式(全)

日期資料格式的處理,兩個示例:

CONVERT(varchar(16), 時間一, 20) 結果:2007-02-01 08:02/*時間一般為getdate()函式或資料表裡的欄位*/

CONVERT(varchar(10), 時間一, 23) 結果:2007-02-01 /*varchar(10)表示日期輸出的格式,如果不夠長會發生擷取*/


語句及查詢結果:
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

說明:
使用 CONVERT:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

引數
expression

是任何有效的 Microsoft® SQL Server™ 表示式。。 

data_type

目標系統所提供的資料型別,包括 bigint 和 sql_variant。不能使用使用者定義的資料型別。
length

nchar、nvarchar、char、varchar、binary 或 varbinary 資料型別的可選引數。 

style

日期格式樣式,藉以將 datetime 或 smalldatetime 資料轉換為字元資料(nchar、nvarchar、char、varchar、nchar 或 nvarchar 資料型別);或者字串格式樣式,藉以將 float、real、money 或 smallmoney 資料轉換為字元資料(nchar、nvarchar、char、varchar、nchar 或 nvarchar 資料型別)。

SQL Server 支援使用科威特演算法的阿拉伯樣式中的資料格式。

在表中,左側的兩列表示將 datetime 或 smalldatetime 轉換為字元資料的 style 值。給 style 值加 100,可獲得包括世紀數位的四位年份 (yyyy)。

不帶世紀數位 (yy) 帶世紀數位 (yyyy) 
標準 
輸入/輸出** 
- 0 或 100 (*) 預設值 mon dd yyyy hh:miAM(或 PM) 
1 101 美國 mm/dd/yyyy 
2 102 ANSI yy.mm.dd 
3 103 英國/法國 dd/mm/yy 
4 104 德國 dd.mm.yy 
5 105 義大利 dd-mm-yy 
6 106 - dd mon yy 
7 107 - mon dd, yy 
8 108 - hh:mm:ss 
- 9 或 109 (*) 預設值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM) 
10 110 美國 mm-dd-yy 
11 111 日本 yy/mm/dd 
12 112 ISO yymmdd 
- 13 或 113 (*) 歐洲預設值 + 毫秒 dd mon yyyy hh:mm:ss:mmm(24h) 
14 114 - hh:mi:ss:mmm(24h) 
- 20 或 120 (*) ODBC 規範 yyyy-mm-dd hh:mm:ss[.fff] 
- 21 或 121 (*) ODBC 規範(帶毫秒) yyyy-mm-dd hh:mm:ss[.fff] 
- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss.mmm(不含空格) 
- 130* Hijri**** dd mon yyyy hh:mi:ss:mmmAM 
- 131* Hijri**** dd/mm/yy hh:mi:ss:mmmAM 


* 預設值(style 0 或 100、9 或 109、13 或 113、20 或 120、21 或 121)始終返回世紀數位 (yyyy)。
** 當轉換為 datetime時輸入;當轉換為字元資料時輸出。
*** 專門用於 XML。對於從 datetime或 smalldatetime 到 character 資料的轉換,輸出格式如表中所示。對於從 float、money 或 smallmoney 到 character 資料的轉換,輸出等同於 style 2。對於從 real 到 character 資料的轉換,輸出等同於 style 1。
****Hijri 是具有幾種變化形式的日曆系統,Microsoft® SQL Server™ 2000 使用其中的科威特演算法。



重要 預設情況下,SQL Server 根據截止年份 2049 解釋兩位數字的年份。即,兩位數字的年份 49 被解釋為 2049,而兩位數字的年份 50 被解釋為 1950。許多客戶端應用程式(例如那些基於 OLE 自動化物件的客戶端應用程式)都使用 2030 作為截止年份。SQL Server 提供一個配置選項("兩位數字的截止年份"),藉以更改 SQL Server 所使用的截止年份並對日期進行一致性處理。然而最安全的辦法是指定四位數字年份。


當從 smalldatetime 轉換為字元資料時,包含秒或毫秒的樣式將在這些位置上顯示零。當從 datetime 或 smalldatetime 值進行轉換時,可以通過使用適當的 char 或 varchar 資料型別長度來截斷不需要的日期部分。

--上個月月初第一天 
select CONVERT(varchar(12) , DATEADD(mm,DATEDIFF(mm,0,dateadd(mm,-1,getdate())),0), 112 ) 
---上個月月末最後一天 
select CONVERT(varchar(12),dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate()),0)), 112 ) 


--1. 顯示本月第一天 
SELECT DATEADD(mm,DATEDIFF(mm,0,getdate()),0) 
select convert(datetime,convert(varchar(8),getdate(),120)+'01',120) 
--2. 顯示本月最後一天 
select dateadd(day,-1,convert(datetime,convert(varchar(8),dateadd(month,1,getdate()),120)+'01',120)) 
SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0)) 
--3. 上個月的最後一天 

SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0)) 
--4. 本月的第一個星期一 
select DATEADD(wk,DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate())),0) 
--5. 本年的第一天 
SELECT DATEADD(yy,DATEDIFF(yy,0,getdate()),0) 
--6. 本年的最後一天 
SELECT dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,0)) 
--7. 去年的最後一天 
SELECT dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()),0)) 
--8. 本季度的第一天 
SELECT DATEADD(qq,DATEDIFF(qq,0,getdate()),0) 
--9. 本週的星期一 
SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),0) 
--10. 查詢本月的記錄 
select * from tableName where DATEPART(mm, theDate)=DATEPART(mm, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE()) 
--11. 查詢本週的記錄 
select * from tableName where DATEPART(wk, theDate) = DATEPART(wk, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE()) 
--12 查詢本季的記錄 注:其中:GETDATE() 是獲得系統時間的函式。 
select * from tableName where DATEPART(qq, theDate) = DATEPART(qq, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE()) 
--13. 獲取當月總天數: 
select DATEDIFF(dd,getdate(),DATEADD(mm, 1, getdate())) 
select datediff(day,dateadd(mm, datediff(mm,'',getdate()), ''),dateadd(mm, datediff(mm,'',getdate()), '1900-02-01')) 
--14. 獲取當前為星期幾 
SELECT DATENAME(weekday, getdate()) 
select CONVERT(varchar(12) , getdate(), 101 ) --12/28/2007 
select CONVERT(varchar(12) , getdate(), 102 ) --2007.12.28 
select CONVERT(varchar(12) , getdate(), 103 ) --28/12/2007 
select CONVERT(varchar(12) , getdate(), 104 ) --28.12.2007 
select CONVERT(varchar(12) , getdate(), 105 ) --28-12-2007 
select CONVERT(varchar(12) , getdate(), 106 ) --28 12 2007 
select CONVERT(varchar(12) , getdate(), 107 ) --12 28, 2007 
select CONVERT(varchar(12) , getdate(), 108 ) --10:06:33 
select CONVERT(varchar(12) , getdate(), 109 ) --12 28 2007 1 
select CONVERT(varchar(12) , getdate(), 110 ) --12-28-2007 
select CONVERT(varchar(12) , getdate(), 111 ) --2007/12/28 
select CONVERT(varchar(12) , getdate(), 112 ) --20071228 
select CONVERT(varchar(12) , getdate(), 113 ) --28 12 2007 1 
select CONVERT(varchar(12) , getdate(), 114 ) --10:07:36:623 
select CONVERT(varchar, getdate(), 120 ) --2007-12-28 10:08:56 
select CONVERT(varchar(10), getdate(), 120 ) --2007-12-28 
select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','') --20071228101012