不帶世紀(jì)數(shù)位 (yy) | 帶世紀(jì)數(shù)位 (yyyy) | 標(biāo)準(zhǔn) |
輸入/輸出** |
---|---|---|---|
- | 0 或 100 (*) | 默認(rèn)值 | 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 (*) | 默認(rèn)值 + 毫秒 | mon dd yyyy hh:mi:ss:mmmAM(或 PM) |
10 | 110 | 美國 | mm-dd-yy |
11 | 111 | 日本 | yy/mm/dd |
12 | 112 | ISO | yymmdd |
- | 13 或 113 (*) | 歐洲默認(rèn)值 + 毫秒 | dd mon yyyy hh:mm:ss:mmm(24h) |
14 | 114 | - | hh:mi:ss:mmm(24h) |
- | 20 或 120 (*) | ODBC 規(guī)范 | yyyy-mm-dd hh:mm:ss[.fff] |
- | 21 或 121 (*) | ODBC 規(guī)范(帶毫秒) | 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 |
* 默認(rèn)值(style 0 或 100、9 或 109、13 或 113、20 或 120、21 或 121)始終返回世紀(jì)數(shù)位 (yyyy)。
** 當(dāng)轉(zhuǎn)換為 datetime時(shí)輸入;當(dāng)轉(zhuǎn)換為字符數(shù)據(jù)時(shí)輸出。
*** 專門用于 XML。對(duì)于從 datetime或 smalldatetime 到 character 數(shù)據(jù)的轉(zhuǎn)換,輸出格式如表中所示。對(duì)于從 float、money 或 smallmoney 到 character 數(shù)據(jù)的轉(zhuǎn)換,輸出等同于 style 2。對(duì)于從 real 到 character 數(shù)據(jù)的轉(zhuǎn)換,輸出等同于 style 1。
****Hijri 是具有幾種變化形式的日歷系統(tǒng),Microsoft® SQL Server™ 2000 使用其中的科威特算法。
重要 默認(rèn)情況下,SQL Server 根據(jù)截止年份 2049 解釋兩位數(shù)字的年份。即,兩位數(shù)字的年份 49 被解釋為 2049,而兩位數(shù)字的年份 50 被解釋為 1950。許多客戶端應(yīng)用程序(例如那些基于 OLE 自動(dòng)化對(duì)象的客戶端應(yīng)用程序)都使用 2030 作為截止年份。SQL Server 提供一個(gè)配置選項(xiàng)("兩位數(shù)字的截止年份"),借以更改 SQL Server 所使用的截止年份并對(duì)日期進(jìn)行一致性處理。然而最安全的辦法是指定四位數(shù)字年份。
當(dāng)從 smalldatetime 轉(zhuǎn)換為字符數(shù)據(jù)時(shí),包含秒或毫秒的樣式將在這些位置上顯示零。當(dāng)從 datetime 或 smalldatetime 值進(jìn)行轉(zhuǎn)換時(shí),可以通過使用適當(dāng)?shù)?char 或 varchar 數(shù)據(jù)類型長度來截?cái)嗖恍枰娜掌诓糠帧?/SPAN>
PS:結(jié)合datediff()函數(shù)用來比較時(shí)間特別有用。
-------------------------------------------------------------------------------------------------------------------------------------------
1. 當(dāng)前系統(tǒng)日期、時(shí)間
select getdate()
2. dateadd 在向指定日期加上一段時(shí)間的基礎(chǔ)上,返回新的 datetime 值
例如:向日期加上2天
select dateadd(day,2,'2004-10-15') --返回:2004-10-17 00:00:00.000
3. datediff 返回跨兩個(gè)指定日期的日期和時(shí)間邊界數(shù)。
select datediff(day,'2004-09-01','2004-09-18') --返回:17
4. datepart 返回代表指定日期的指定日期部分的整數(shù)。
SELECT DATEPART(month, '2004-10-15') --返回 10
5. datename 返回代表指定日期的指定日期部分的字符串
SELECT datename(weekday, '2004-10-15') --返回:星期五
6. day(), month(),year() --可以與datepart對(duì)照一下
select 當(dāng)前日期=convert(varchar(10),getdate(),120)
,當(dāng)前時(shí)間=convert(varchar(8),getdate(),114)
select datename(dw,'2004-10-15')
select 本年第多少周=datename(week,'2004-10-15')
,今天是周幾=datename(weekday,'2004-10-15')
函數(shù) 參數(shù)/功能
GetDate( ) 返回系統(tǒng)目前的日期與時(shí)間
DateDiff (interval,date1,date2)
以interval 指定的方式,返回date2 與date1兩個(gè)日期之間的差值 date2-date1
DateAdd (interval,number,date) 以interval指定的方式,加上number之后的日期
DatePart (interval,date) 返回日期date中,interval指定部分所對(duì)應(yīng)的整數(shù)值
DateName (interval,date) 返回日期date中,interval指定部分所對(duì)應(yīng)的字符串名稱
參數(shù) interval的設(shè)定值如下:
值 縮 寫(Sql Server) Access 和 ASP 說明
Year Yy yyyy 年 1753 ~ 9999
Quarter Qq q 季 1 ~ 4
Month Mm m 月1 ~ 12
Day of year Dy y 一年的日數(shù),一年中的第幾日 1-366
Day Dd d 日,1-31
Weekday Dw w 一周的日數(shù),一周中的第幾日 1-7
Week Wk ww 周,一年中的第幾周 0 ~ 51
Hour Hh h 時(shí)0 ~ 23
Minute Mi n 分鐘0 ~ 59
Second Ss s 秒 0 ~ 59
Millisecond Ms - 毫秒 0 ~ 999
access 和 asp 中用date()和now()取得系統(tǒng)日期時(shí)間;其中DateDiff,DateAdd,DatePart也同是能用于Access和asp中,這些函數(shù)的用法也類似
舉例:
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號(hào)
DatePart('y','2005-7-25 22:56:32')返回值為 206即這一年中第206天
DatePart('yyyy','2005-7-25 22:56:32')返回值為 2005即2005年
SQL Server DATEPART() 函數(shù)返回 SQLServer datetime 字段的一部分。
SQL Server DATEPART() 函數(shù)的語法是:
DATEPART(portion, datetime)
其中 datetime 是 SQLServer datetime 字段和部分的名稱是下列之一: Ms for Milliseconds
Yy for Year
Qq for Quarter of the Year
Mm for Month
Dy for the Day of the Year
Dd for Day of the Month
Wk for Week
Dw for the Day of the Week
Hh for Hour
Mi for Minute
Ss for Second
詳細(xì)的說明:
通常,你需要獲得當(dāng)前日期和計(jì)算一些其他的日期,例如,你的程序可能需要判斷一個(gè)月的第一天或者最后一天。你們大部分人大概都知道怎樣把日期進(jìn)行分割(年、月、日等),然后僅僅用分割出來的年、月、日等放在幾個(gè)函數(shù)中計(jì)算出自己所需要的日期!在這篇文章里,我將告訴你如何使用DATEADD和 DATEDIFF函數(shù)來計(jì)算出在你的程序中可能你要用到的一些不同日期。
在使用本文中的例子之前,你必須注意以下的問題。大部分可能不是所有例子在不同的機(jī)器上執(zhí)行的結(jié)果可能不一樣,這完全由哪一天是一個(gè)星期的第一天這個(gè)設(shè)置決定。第一天(DATEFIRST)設(shè)定決定了你的系統(tǒng)使用哪一天作為一周的第一天。所有以下的例子都是以星期天作為一周的第一天來建立,也就是第一天設(shè)置為7。假如你的第一天設(shè)置不一樣,你可能需要調(diào)整這些例子,使它和不同的第一天設(shè)置相符合。你可以通過@@DATEFIRST函數(shù)來檢查第一天設(shè)置。
為了理解這些例子,我們先復(fù)習(xí)一下DATEDIFF和DATEADD函數(shù)。DATEDIFF函數(shù)計(jì)算兩個(gè)日期之間的小時(shí)、天、周、月、年等時(shí)間間隔總數(shù)。 DATEADD函數(shù)計(jì)算一個(gè)日期通過給時(shí)間間隔加減來獲得一個(gè)新的日期。要了解更多的DATEDIFF和DATEADD函數(shù)以及時(shí)間間隔可以閱讀微軟聯(lián)機(jī)幫助。
使用DATEDIFF和DATEADD函數(shù)來計(jì)算日期,和本來從當(dāng)前日期轉(zhuǎn)換到你需要的日期的考慮方法有點(diǎn)不同。你必須從時(shí)間間隔這個(gè)方面來考慮。比如,從當(dāng)前日期到你要得到的日期之間有多少時(shí)間間隔,或者,從今天到某一天(比如1900-1-1)之間有多少時(shí)間間隔,等等。理解怎樣著眼于時(shí)間間隔有助于你輕松的理解我的不同的日期計(jì)算例子。
一個(gè)月的第一天
第一個(gè)例子,我將告訴你如何從當(dāng)前日期去這個(gè)月的最后一天。請(qǐng)注意:這個(gè)例子以及這篇文章中的其他例子都將只使用DATEDIFF和DATEADD函數(shù)來計(jì)算我們想要的日期。每一個(gè)例子都將通過計(jì)算但前的時(shí)間間隔,然后進(jìn)行加減來得到想要計(jì)算的日期。
這是計(jì)算一個(gè)月第一天的SQL 腳本:
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
我們把這個(gè)語句分開來看看它是如何工作的。最核心的函數(shù)是getdate(),大部分人都知道這個(gè)是返回當(dāng)前的日期和時(shí)間的函數(shù)。下一個(gè)執(zhí)行的函數(shù) DATEDIFF(mm,0,getdate())是計(jì)算當(dāng)前日期和“1900-01-01 00:00:00.000”這個(gè)日期之間的月數(shù)。記?。簳r(shí)期和時(shí)間變量和毫秒一樣是從“1900-01-01 00:00:00.000”開始計(jì)算的。這就是為什么你可以在DATEDIFF函數(shù)中指定第一個(gè)時(shí)間表達(dá)式為“0”。下一個(gè)函數(shù)是DATEADD,增加當(dāng)前日期到“1900-01-01”的月數(shù)。通過增加預(yù)定義的日期“1900-01-01”和當(dāng)前日期的月數(shù),我們可以獲得這個(gè)月的第一天。另外,計(jì)算出來的日期的時(shí)間部分將會(huì)是“00:00:00.000”。
這個(gè)計(jì)算的技巧是先計(jì)算當(dāng)前日期到“1900-01-01”的時(shí)間間隔數(shù),然后把它加到“1900-01-01”上來獲得特殊的日期,這個(gè)技巧可以用來計(jì)算很多不同的日期。下一個(gè)例子也是用這個(gè)技巧從當(dāng)前日期來產(chǎn)生不同的日期。
本周的星期一
這里我是用周(wk)的時(shí)間間隔來計(jì)算哪一天是本周的星期一。
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
一年的第一天
現(xiàn)在用年(yy)的時(shí)間間隔來顯示這一年的第一天。
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
季度的第一天
假如你要計(jì)算這個(gè)季度的第一天,這個(gè)例子告訴你該如何做。
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
當(dāng)天的半夜
曾經(jīng)需要通過getdate()函數(shù)為了返回時(shí)間值截掉時(shí)間部分,就會(huì)考慮到當(dāng)前日期是不是在半夜。假如這樣,這個(gè)例子使用DATEDIFF和DATEADD函數(shù)來獲得半夜的時(shí)間點(diǎn)。
SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)
深入DATEDIFF和DATEADD函數(shù)計(jì)算
你可以明白,通過使用簡單的DATEDIFF和DATEADD函數(shù)計(jì)算,你可以發(fā)現(xiàn)很多不同的可能有意義的日期。
目前為止的所有例子只是僅僅計(jì)算當(dāng)前的時(shí)間和“1900-01-01”之間的時(shí)間間隔數(shù)量,然后把它加到“1900-01-01”的時(shí)間間隔上來計(jì)算出日期。假定你修改時(shí)間間隔的數(shù)量,或者使用不同的時(shí)間間隔來調(diào)用DATEADD函數(shù),或者減去時(shí)間間隔而不是增加,那么通過這些小的調(diào)整你可以發(fā)現(xiàn)和多不同的日期。
這里有四個(gè)例子使用另外一個(gè)DATEADD函數(shù)來計(jì)算最后一天來分別替換DATEADD函數(shù)前后兩個(gè)時(shí)間間隔。
上個(gè)月的最后一天
這是一個(gè)計(jì)算上個(gè)月最后一天的例子。它通過從一個(gè)月的最后一天這個(gè)例子上減去3毫秒來獲得。有一點(diǎn)要記住,在Sql Server中時(shí)間是精確到3毫秒。這就是為什么我需要減去3毫秒來獲得我要的日期和時(shí)間。
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
計(jì)算出來的日期的時(shí)間部分包含了一個(gè)Sql Server可以記錄的一天的最后時(shí)刻(“23:59:59:997”)的時(shí)間。
去年的最后一天
連接上面的例子,為了要得到去年的最后一天,你需要在今年的第一天上減去3毫秒。
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
本月的最后一天
現(xiàn)在,為了獲得本月的最后一天,我需要稍微修改一下獲得上個(gè)月的最后一天的語句。修改需要給用DATEDIFF比較當(dāng)前日期和“1900-01-01”返回的時(shí)間間隔上加1。通過加1個(gè)月,我計(jì)算出下個(gè)月的第一天,然后減去3毫秒,這樣就計(jì)算出了這個(gè)月的最后一天。這是計(jì)算本月最后一天的SQL腳本。
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
本年的最后一天
你現(xiàn)在應(yīng)該掌握這個(gè)的做法,這是計(jì)算本年最后一天腳本
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
本月的第一個(gè)星期一
好了,現(xiàn)在是最后一個(gè)例子。這里我要計(jì)算這個(gè)月的第一個(gè)星期一,這是計(jì)算的腳本。
select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)
標(biāo)簽:嘉興 晉城 日照 保定 延邊 三明 合肥 澳門
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《sql convert函數(shù)使用小結(jié)》,本文關(guān)鍵詞 sql,convert,函數(shù),使用,小結(jié),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。