共計 11174 個字符,預(yù)計需要花費 28 分鐘才能閱讀完成。
sql 中怎樣使用 convert 函數(shù),針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
CONVERT(data_type,expression[,style]) convert(varchar(10), 字段名, 轉(zhuǎn)換格式)
說明: 此樣式一般在時間類型 (datetime,smalldatetime) 與字符串類型 (nchar,nvarchar,char,varchar) 相互轉(zhuǎn)換的時候才用到.
語句 結(jié)果 SELECT CONVERT(varchar(100), GETDATE(), 0) 07 15 2009 4:06PMSELECT CONVERT(varchar(100), GETDATE(), 1) 07/15/09SELECT CONVERT(varchar(100), GETDATE(), 2) 09.07.15SELECT CONVERT(varchar(100), GETDATE(), 3) 15/07/09SELECT CONVERT(varchar(100), GETDATE(), 4) 15.07.09SELECT CONVERT(varchar(100), GETDATE(), 5) 15-07-09SELECT CONVERT(varchar(100), GETDATE(), 6) 15 07 09SELECT CONVERT(varchar(100), GETDATE(), 7) 07 15, 09SELECT CONVERT(varchar(100), GETDATE(), 8) 16:06:26SELECT CONVERT(varchar(100), GETDATE(), 9) 07 15 2009 4:06:26:513PMSELECT CONVERT(varchar(100), GETDATE(), 10) 07-15-09SELECT CONVERT(varchar(100), GETDATE(), 11) 09/07/15SELECT CONVERT(varchar(100), GETDATE(), 12) 090715SELECT CONVERT(varchar(100), GETDATE(), 13) 15 07 2009 16:06:26:513SELECT CONVERT(varchar(100), GETDATE(), 14) 16:06:26:513SELECT CONVERT(varchar(100), GETDATE(), 20) 2009-07-15 16:06:26SELECT CONVERT(varchar(100), GETDATE(), 21) 2009-07-15 16:06:26.513SELECT CONVERT(varchar(100), GETDATE(), 22) 07/15/09 4:06:26 PMSELECT CONVERT(varchar(100), GETDATE(), 23) 2009-07-15SELECT CONVERT(varchar(100), GETDATE(), 24) 16:06:26SELECT CONVERT(varchar(100), GETDATE(), 25) 2009-07-15 16:06:26.513SELECT CONVERT(varchar(100), GETDATE(), 100) 07 15 2009 4:06PMSELECT CONVERT(varchar(100), GETDATE(), 101) 07/15/2009SELECT CONVERT(varchar(100), GETDATE(), 102) 2009.07.15SELECT CONVERT(varchar(100), GETDATE(), 103) 15/07/2009SELECT CONVERT(varchar(100), GETDATE(), 104) 15.07.2009SELECT CONVERT(varchar(100), GETDATE(), 105) 15-07-2009SELECT CONVERT(varchar(100), GETDATE(), 106) 15 07 2009SELECT CONVERT(varchar(100), GETDATE(), 107) 07 15, 2009SELECT CONVERT(varchar(100), GETDATE(), 108) 16:06:26SELECT CONVERT(varchar(100), GETDATE(), 109) 07 15 2009 4:06:26:513PMSELECT CONVERT(varchar(100), GETDATE(), 110) 07-15-2009SELECT CONVERT(varchar(100), GETDATE(), 111) 2009/07/15SELECT CONVERT(varchar(100), GETDATE(), 112) 20090715SELECT CONVERT(varchar(100), GETDATE(), 113) 15 07 2009 16:06:26:513SELECT CONVERT(varchar(100), GETDATE(), 114) 16:06:26:513SELECT CONVERT(varchar(100), GETDATE(), 120) 2009-07-15 16:06:26SELECT CONVERT(varchar(100), GETDATE(), 121) 2009-07-15 16:06:26.513SELECT CONVERT(varchar(100), GETDATE(), 126) 2009-07-15T16:06:26.513SELECT CONVERT(varchar(100), GETDATE(), 130) 23 ??? 1430 4:06:26:513PMSELECT CONVERT(varchar(100), GETDATE(), 131) 23/07/1430 4:06:26:513PM
style 數(shù)字在轉(zhuǎn)換時間時的含義如下:
————————————————————————————————————Style(2 位表示年份) | Style(4 位表示年份) | 輸入輸出格式 ————————————————————————————————————0 | 100 | mon dd yyyy hh:miAM(或 PM)————————————————————————————————————1 | 101 美國 | mm/dd/yy————————————————————————————————————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:mmmmAM(或 PM)————————————————————————————————————10 | 110 美國 | mm-dd-yy————————————————————————————————————11 | 111 日本 | yy/mm/dd————————————————————————————————————12 | 112 ISO | yymmdd————————————————————————————————————13 | 113 歐洲默認值 | dd mon yyyy hh:mi:ss:mmm(24 小時制)————————————————————————————————————14 | 114 | hh:mi:ss:mmm(24 小時制)————————————————————————————————————20 | 120 ODBC 規(guī)范 | yyyy-mm-dd hh:mi:ss(24 小時制)————————————————————————————————————21 | 121 | yyyy-mm-dd hh:mi:ss:mmm(24 小時制) ————————————————————————————————————
說明: 使用 CONVERT:
CONVERT (data_type [ ( length) ] , expression [, style] )
參數(shù)
expression
是任何有效的 Microsoft reg; SQL Server? 表達式。。
data_type
目標(biāo)系統(tǒng)所提供的數(shù)據(jù)類型,包括 bigint 和 sql_variant。不能使用用戶定義的數(shù)據(jù)類型。length
nchar、nvarchar、char、varchar、binary 或 varbinary 數(shù)據(jù)類型的可選參數(shù)。
style
日期格式樣式,借以將 datetime 或 smalldatetime 數(shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù)(nchar、nvarchar、char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型);或者字符串格式樣式,借以將 float、real、money 或 smallmoney 數(shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù)(nchar、nvarchar、char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型)。
SQL Server 支持使用科威特算法的阿拉伯樣式中的數(shù)據(jù)格式。
在表中,左側(cè)的兩列表示將 datetime 或 smalldatetime 轉(zhuǎn)換為字符數(shù)據(jù)的 style 值。給 style 值加 100,可獲得包括世紀數(shù)位的四位年份 (yyyy)。
-0 或 100 (*) 默認值 mon dd yyyy hh:miAM(或 PM)1101 美國 mm/dd/yyyy2102ANSIyy.mm.dd3103 英國 / 法國 dd/mm/yy4104 德國 dd.mm.yy5105 意大利 dd-mm-yy6106-dd mon yy7107-mon dd, yy8108-hh:mm:ss-9 或 109 (*) 默認值 + 毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM)10110 美國 mm-dd-yy11111 日本 yy/mm/dd12112ISOyymmdd-13 或 113 (*) 歐洲默認值 + 毫秒 dd mon yyyy hh:mm:ss:mmm(24h)14114-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(***)ISO8601yyyy-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)始終返回世紀數(shù)位 (yyyy)。** 當(dāng)轉(zhuǎn)換為 datetime 時輸入;當(dāng)轉(zhuǎn)換為字符數(shù)據(jù)時輸出。*** 專門用于 XML。對于從 datetime 或 smalldatetime 到 character 數(shù)據(jù)的轉(zhuǎn)換,輸出格式如表中所示。對于從 float、money 或 smallmoney 到 character 數(shù)據(jù)的轉(zhuǎn)換,輸出等同于 style 2。對于從 real 到 character 數(shù)據(jù)的轉(zhuǎn)換,輸出等同于 style 1。****Hijri 是具有幾種變化形式的日歷系統(tǒng),Microsoft reg; SQL Server? 2000 使用其中的科威特算法。
重要 默認情況下,SQL Server 根據(jù)截止年份 2049 解釋兩位數(shù)字的年份。即,兩位數(shù)字的年份 49 被解釋為 2049,而兩位數(shù)字的年份 50 被解釋為 1950。許多客戶端應(yīng)用程序(例如那些基于 OLE 自動化對象的客戶端應(yīng)用程序)都使用 2030 作為截止年份。SQL Server 提供一個配置選項(兩位數(shù)字的截止年份),借以更改 SQL Server 所使用的截止年份并對日期進行一致性處理。然而最安全的辦法是指定四位數(shù)字年份。
當(dāng)從 smalldatetime 轉(zhuǎn)換為字符數(shù)據(jù)時,包含秒或毫秒的樣式將在這些位置上顯示零。當(dāng)從 datetime 或 smalldatetime 值進行轉(zhuǎn)換時,可以通過使用適當(dāng)?shù)?char 或 varchar 數(shù)據(jù)類型長度來截斷不需要的日期部分。
PS:結(jié)合 datediff()函數(shù)用來比較時間特別有用。
——————————————————————————————————————————————-
1. 當(dāng)前系統(tǒng)日期、時間 select getdate()
2. dateadd 在向指定日期加上一段時間的基礎(chǔ)上,返回新的 datetime 值例如:向日期加上 2 天 select dateadd(day,2, 2004-10-15) – 返回:2004-10-17 00:00:00.000
3. datediff 返回跨兩個指定日期的日期和時間邊界數(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 對照一下
select 當(dāng)前日期 =convert(varchar(10),getdate(),120), 當(dāng)前時間 =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)目前的日期與時間 DateDiff (interval,date1,date2) 以 interval 指定的方式,返回 date2 與 date1 兩個日期之間的差值 date2-date1 DateAdd (interval,number,date) 以 interval 指定的方式,加上 number 之后的日期 DatePart (interval,date) 返回日期 date 中,interval 指定部分所對應(yīng)的整數(shù)值 DateName (interval,date) 返回日期 date 中,interval 指定部分所對應(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 時 0 ~ 23 Minute Mi n 分鐘 0 ~ 59 Second Ss s 秒 0 ~ 59 Millisecond Ms – 毫秒 0 ~ 999
access 和 asp 中用 date()和 now()取得系統(tǒng)日期時間;其中 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 號 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 MillisecondsYy for YearQq for Quarter of the YearMm for MonthDy for the Day of the YearDd for Day of the MonthWk for WeekDw for the Day of the WeekHh for HourMi for MinuteSs for Second
詳細的說明:
通常,你需要獲得當(dāng)前日期和計算一些其他的日期,例如,你的程序可能需要判斷一個月的第一天或者最后一天。你們大部分人大概都知道怎樣把日期進行分割(年、月、日等),然后僅僅用分割出來的年、月、日等放在幾個函數(shù)中計算出自己所需要的日期!在這篇文章里,我將告訴你如何使用 DATEADD 和 DATEDIFF 函數(shù)來計算出在你的程序中可能你要用到的一些不同日期。在使用本文中的例子之前,你必須注意以下的問題。大部分可能不是所有例子在不同的機器上執(zhí)行的結(jié)果可能不一樣,這完全由哪一天是一個星期的第一天這個設(shè)置決定。第一天(DATEFIRST)設(shè)定決定了你的系統(tǒng)使用哪一天作為一周的第一天。所有以下的例子都是以星期天作為一周的第一天來建立,也就是第一天設(shè)置為 7。假如你的第一天設(shè)置不一樣,你可能需要調(diào)整這些例子,使它和不同的第一天設(shè)置相符合。你可以通過 @@DATEFIRST 函數(shù)來檢查第一天設(shè)置。
為了理解這些例子,我們先復(fù)習(xí)一下 DATEDIFF 和 DATEADD 函數(shù)。DATEDIFF 函數(shù)計算兩個日期之間的小時、天、周、月、年等時間間隔總數(shù)。DATEADD 函數(shù)計算一個日期通過給時間間隔加減來獲得一個新的日期。要了解更多的 DATEDIFF 和 DATEADD 函數(shù)以及時間間隔可以閱讀微軟聯(lián)機幫助。
使用 DATEDIFF 和 DATEADD 函數(shù)來計算日期,和本來從當(dāng)前日期轉(zhuǎn)換到你需要的日期的考慮方法有點不同。你必須從時間間隔這個方面來考慮。比如,從當(dāng)前日期到你要得到的日期之間有多少時間間隔,或者,從今天到某一天(比如 1900-1-1)之間有多少時間間隔,等等。理解怎樣著眼于時間間隔有助于你輕松的理解我的不同的日期計算例子。
一個月的第一天
第一個例子,我將告訴你如何從當(dāng)前日期去這個月的最后一天。請注意:這個例子以及這篇文章中的其他例子都將只使用 DATEDIFF 和 DATEADD 函數(shù)來計算我們想要的日期。每一個例子都將通過計算但前的時間間隔,然后進行加減來得到想要計算的日期。
這是計算一個月第一天的 SQL 腳本:SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
我們把這個語句分開來看看它是如何工作的。最核心的函數(shù)是 getdate(),大部分人都知道這個是返回當(dāng)前的日期和時間的函數(shù)。下一個執(zhí)行的函數(shù) DATEDIFF(mm,0,getdate())是計算當(dāng)前日期和“1900-01-01 00:00:00.000”這個日期之間的月數(shù)。記住:時期和時間變量和毫秒一樣是從“1900-01-01 00:00:00.000”開始計算的。這就是為什么你可以在 DATEDIFF 函數(shù)中指定第一個時間表達式為“0”。下一個函數(shù)是 DATEADD,增加當(dāng)前日期到“1900-01-01”的月數(shù)。通過增加預(yù)定義的日期“1900-01-01”和當(dāng)前日期的月數(shù),我們可以獲得這個月的第一天。另外,計算出來的日期的時間部分將會是“00:00:00.000”。
這個計算的技巧是先計算當(dāng)前日期到“1900-01-01”的時間間隔數(shù),然后把它加到“1900-01-01”上來獲得特殊的日期,這個技巧可以用來計算很多不同的日期。下一個例子也是用這個技巧從當(dāng)前日期來產(chǎn)生不同的日期。
本周的星期一
這里我是用周 (wk) 的時間間隔來計算哪一天是本周的星期一。
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
一年的第一天
現(xiàn)在用年 (yy) 的時間間隔來顯示這一年的第一天。
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
季度的第一天
假如你要計算這個季度的第一天,這個例子告訴你該如何做。
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
當(dāng)天的半夜
曾經(jīng)需要通過 getdate()函數(shù)為了返回時間值截掉時間部分,就會考慮到當(dāng)前日期是不是在半夜。假如這樣,這個例子使用 DATEDIFF 和 DATEADD 函數(shù)來獲得半夜的時間點。
SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)
深入 DATEDIFF 和 DATEADD 函數(shù)計算
你可以明白,通過使用簡單的 DATEDIFF 和 DATEADD 函數(shù)計算,你可以發(fā)現(xiàn)很多不同的可能有意義的日期。
目前為止的所有例子只是僅僅計算當(dāng)前的時間和“1900-01-01”之間的時間間隔數(shù)量,然后把它加到“1900-01-01”的時間間隔上來計算出日期。假定你修改時間間隔的數(shù)量,或者使用不同的時間間隔來調(diào)用 DATEADD 函數(shù),或者減去時間間隔而不是增加,那么通過這些小的調(diào)整你可以發(fā)現(xiàn)和多不同的日期。
這里有四個例子使用另外一個 DATEADD 函數(shù)來計算最后一天來分別替換 DATEADD 函數(shù)前后兩個時間間隔。
上個月的最后一天
這是一個計算上個月最后一天的例子。它通過從一個月的最后一天這個例子上減去 3 毫秒來獲得。有一點要記住,在 Sql Server 中時間是精確到 3 毫秒。這就是為什么我需要減去 3 毫秒來獲得我要的日期和時間。
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0))
計算出來的日期的時間部分包含了一個 Sql Server 可以記錄的一天的最后時刻 (“23:59:59:997”) 的時間。
去年的最后一天
連接上面的例子,為了要得到去年的最后一天,你需要在今年的第一天上減去 3 毫秒。
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0))
本月的最后一天
現(xiàn)在,為了獲得本月的最后一天,我需要稍微修改一下獲得上個月的最后一天的語句。修改需要給用 DATEDIFF 比較當(dāng)前日期和“1900-01-01”返回的時間間隔上加 1。通過加 1 個月,我計算出下個月的第一天,然后減去 3 毫秒,這樣就計算出了這個月的最后一天。這是計算本月最后一天的 SQL 腳本。
SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))
本年的最后一天
你現(xiàn)在應(yīng)該掌握這個的做法,這是計算本年最后一天腳本
SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))
關(guān)于 sql 中怎樣使用 convert 函數(shù)問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注丸趣 TV 行業(yè)資訊頻道了解更多相關(guān)知識。