SQL Server 2008中的創(chuàng)建格式化日期
讓我們來創(chuàng)建dbo.format_date 函數(shù),如下所示。
#p#
- /****** Object: UserDefinedFunction [dbo].[format_date]
- Script Date: 05/12/2009 23:19:35 ******/
- IF EXISTS (SELECT * FROM sys.objects
- WHERE object_id = OBJECT_ID(N'[dbo].[format_date]')
- AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
- DROP FUNCTION [dbo].[format_date]
- GO
- /****** Object: UserDefinedFunction [dbo].[format_date]
- Script Date: 05/12/2009 23:19:18 ******/
- SET ANSI_NULLS ON
- GO
- SET QUOTED_IDENTIFIER ON
- GO
- SET CONCAT_NULL_YIELDS_NULL OFF
- go
- CREATE function [dbo].[format_date]
- (@inputdate datetime ,@format varchar(500))
- returns varchar(500)
- as
- begin
- declare @year varchar(4) --YYYY
- declare @shortyear varchar(4) --Yr
- declare @quarter varchar(4) --QQ
- declare @month varchar(2) --MM
- declare @week varchar(2) --WW
- declare @day varchar(2) --DD
- declare @24hours varchar(2) --24HH
- declare @12hours varchar(2) --HH
- declare @minutes varchar(2) --MI
- declare @seconds varchar(2) --SS
- declare @milliseconds varchar(3) --MS
- declare @microseconds varchar(6) --MCS
- declare @nanoseconds varchar(9) --NS
- declare @dayname varchar(15) --DAY
- declare @monthname varchar(15) --MONTH
- declare @shortmonthname varchar(15) --MON
- declare @AMPM varchar(15) --AMPM
- declare @TZ varchar(15) --TZ
- declare @UNIXPOSIX varchar(15) --UNIXPOSIX
- --UCASE
- --LCASE
- declare @formatteddate varchar(500)
- --Assign current date and time to
- if (@inputdate is NULL or @inputdate ='')
- begin
- set @inputdate = getdate()
- end
- if (@format is NULL or @format ='')
- begin
- set @format ='YYYY-MM-DD 12HH:MI:SS AMPM'
- end
- --set all values
- set @year = convert(varchar(4),year(@inputdate))
- set @shortyear = right(@year,2)
- set @quarter = convert(varchar(1),datepart(QQ,(@inputdate)))
- set @month = right('0'+convert(varchar(2),month(@inputdate)),2)
- set @week = right('0'+convert(varchar(2),datepart(ww,(@inputdate))),2)
- set @day = right('0'+convert(varchar(2),day(@inputdate)),2)
- set @24hours = right('0'+convert(varchar(2),datepart(hh,@inputdate)),2)
- set @TZ = convert(varchar(10),datename(TZ,convert(varchar(20),@inputdate)))
- set @UNIXPOSIX = convert(varchar(15),datediff(ss,convert(datetime,'01/01/1970 00:00:000'),@inputdate))
- if datepart(hh,@inputdate) >12
- begin
- set @12hours = right('0'+convert(varchar(2),datepart(hh,@inputdate)) -12,2)
- end
- else
- begin
- set @12hours = right('0'+convert(varchar(2),datepart(hh,@inputdate)) ,2)
- end
- if datepart(hh,@inputdate) >11
- begin
- set @AMPM ='PM'
- end
- else
- begin
- set @AMPM ='AM'
- end
- set @minutes = right('0'+convert(varchar(2),datepart(n,@inputdate)),2)
- set @seconds = right('0'+convert(varchar(2),datepart(ss,@inputdate)),2)
- set @milliseconds = convert(varchar(3),datepart(ms,@inputdate))
- set @microseconds = convert(varchar(6),datepart(mcs,@inputdate))
- set @nanoseconds = convert(varchar(9),datepart(ns,@inputdate))
- set @dayname = datename(weekday,@inputdate)
- set @monthname = datename(mm,@inputdate)
- set @shortmonthname= left(datename(mm,@inputdate),3)
- set @formatteddate = @format
- set @formatteddate=replace(@formatteddate,'MONTH',@monthname)
- set @formatteddate=replace(@formatteddate,'MON',@shortmonthname)
- set @formatteddate=replace(@formatteddate,'AMPM',@AMPM)
- set @formatteddate=replace(@formatteddate,'YYYY',@year)
- set @formatteddate=replace(@formatteddate,'Yr',@shortyear)
- set @formatteddate=replace(@formatteddate,'QQ',@quarter)
- set @formatteddate=replace(@formatteddate,'WW',@week)
- set @formatteddate=replace(@formatteddate,'MM',@month)
- set @formatteddate=replace(@formatteddate,'DD',@Day)
- set @formatteddate=replace(@formatteddate,'24HH',@24hours)
- set @formatteddate=replace(@formatteddate,'12HH',@12hours)
- set @formatteddate=replace(@formatteddate,'Mi',@minutes)
- set @formatteddate=replace(@formatteddate,'SS',@seconds)
- set @formatteddate=replace(@formatteddate,'MS',@milliseconds)
- set @formatteddate=replace(@formatteddate,'MCS',@microseconds)
- set @formatteddate=replace(@formatteddate,'NS',@nanoseconds)
- set @formatteddate=replace(@formatteddate,'DAY',@dayname)
- set @formatteddate=replace(@formatteddate,'TZ',@TZ)
- set @formatteddate=replace(@formatteddate,'UNIXPOSIX',@UNIXPOSIX)
- if charindex('ucase',@formatteddate)<>0
- begin
- set @formatteddate=replace(@formatteddate,'ucase','')
- set @formatteddate=upper(@formatteddate)
- end
- if charindex('lcase',@formatteddate)<>0
- begin
- set @formatteddate=replace(@formatteddate,'lcase','')
- set @formatteddate=lower(@formatteddate)
- end
- return @formatteddate
- end
- GO
#p#
現(xiàn)在讓我們使用不同的場(chǎng)景來看看這個(gè)函數(shù)的使用。下面關(guān)鍵字中的任何一個(gè)都可以聯(lián)合使用來顯示不同格式的日期。
YYYY - YYYY格式的年份,包括百年
Yr - YY格式的年份
QQ - 顯示季度
MM - 顯示月份
WW - 顯示星期
DD - 顯示日子
24HH - 以24小時(shí)制的形式顯示小時(shí)
12HH - 以12小時(shí)制的形式顯示小時(shí)
MI - 顯示分鐘
SS - 顯示秒
MS - 顯示毫秒
MCS - 顯示微秒
NS - 顯示十億分之一秒
DAY - 顯示日子的名稱,例如:Monday
MONTH- - 顯示月份的名稱,例如:August
MON - 顯示短的月份名稱,例如:Aug
AMPM - 顯示AM/PM 用于12小時(shí)制格式
TZ - 顯示時(shí)間偏移
UNIXPOSIX - 顯示unix posix時(shí)間。秒數(shù)從1/1/1970開始
UCASE - 以大寫顯示結(jié)果
LCASE - 以小寫顯示結(jié)果
場(chǎng)景 1
如果你想以YYYY/MM/DD的形式顯示日期,那么執(zhí)行下面的命令。
select dbo.format_date(GETDATE(),'YYYY/MM/DD') as Date
結(jié)果:
Date
--------------
2009/01/12
場(chǎng)景 2
要以YYYY-MM-DD格式顯示日期,那么執(zhí)行下面的命令。
select dbo.format_date(GETDATE(),'YYYY-MM-DD') as Date
結(jié)果:
Date
-------------------
2009-01-12
場(chǎng)景 3
要顯示年份和季節(jié),那么執(zhí)行下面的命令。
select dbo.format_date(GETDATE(),'Year: YYYY, Quarter: QQ ') as Date
結(jié)果:
Date
-----------------------
Year: 2009, Quarter: 1
場(chǎng)景 4
要以24小時(shí)制格式顯示時(shí)間,執(zhí)行下面的命令。
select dbo.format_date(GETDATE(),'24HH:MI:SS') as Time
結(jié)果:
Time
------------------------
23:10:07
場(chǎng)景 5
要以12小時(shí)制格式顯示時(shí)間,執(zhí)行下面的命令。
select dbo.format_date(GETDATE(),'12HH:MI:SS AMPM') as Time
結(jié)果:
Time
-----------------------
11:11:02 PM
#p#
場(chǎng)景 6
要以日期形式為YYYY/MM/DD 和時(shí)間形式為24小時(shí)制來顯示,那么執(zhí)行下面的命令。
select dbo.format_date(GETDATE(),'YYYY/MM/DD 24HH:MI:SS') as DateTime
結(jié)果:
DateTime
-----------------------
2009/01/12 23:11:44
場(chǎng)景 7
要以日期形式為YYYY/MM/DD和時(shí)間形式為12小時(shí)制來顯示,那么執(zhí)行下面的命令。
select dbo.format_date(GETDATE(),'YYYY/MM/DD 12HH:MI:SS AMPM') as DateTime
結(jié)果:
DateTime
-------------------------
2009/01/12 11:13:27 PM
場(chǎng)景 8
要以DD-MM-YY 的形式來顯示日期,那么執(zhí)行下面的命令。
select dbo.format_date(GETDATE(),'DD-MM-YR') as Date
結(jié)果:
Date
------------------------
12-01-09
場(chǎng)景 9
要以DDMMYY的形式顯示日期,那么執(zhí)行下面的命令。
select dbo.format_date(GETDATE(),'DDMMYR') as Date
結(jié)果:
Date
----------------------
120109
場(chǎng)景 10
要顯示日期和時(shí)間以你可以使用它來作為文件名稱后綴的形式,那么執(zhí)行下面的命令。
select dbo.format_date(GETDATE(),'YYYY_MM_DD_HH_MI_SS_MS_MCS_NS') as FileNameSuffix
結(jié)果:
FileNameSuffix
--------------------------------------------
2009_01_12_HH_16_18_200_200000_200000000
場(chǎng)景 11
要顯示日期、時(shí)間、月份名稱和日子的名稱,那么執(zhí)行下面的命令。
select dbo.format_date(GETDATE(),'DAY, MONTH DD, YYYY 12HH:MI:SS AMPM') as DateTime
結(jié)果:
DateTime
---------------------------------------
Monday, January 12, 2009 11:20:31 PM
場(chǎng)景 12
要以時(shí)間偏移量來顯示日期、時(shí)間、月份名稱和日子的名稱,那么執(zhí)行下面的命令。
select dbo.format_date(GETDATE(),'DAY MONTH DDth, YR 12HH:MI:SS TZ') as DateTime
結(jié)果:
DateTime
------------------------------------------
Monday January 12th, 09 11:21:42 +00:00
#p#
場(chǎng)景 13
要顯示unix posix時(shí)間,那么執(zhí)行下面的命令。
select dbo.format_date(GETDATE(),'Your Unix time is: UNIXPOSIX') as POSIX
結(jié)果:
POSIX
----------------------------------
Your Unix time is: 1231802580
場(chǎng)景 14
要顯示年份和星期,那么執(zhí)行下面的命令。
select dbo.format_date(GETDATE(),'Year: YYYY, Week: WW') as YearWeek
結(jié)果:
YearWeek
-------------------------
Year: 2009, Week: 03
場(chǎng)景15
要顯示帶有月份名稱的日期,那么執(zhí)行下面的命令。
select dbo.format_date(GETDATE(),'YYYY-MONTH-DD') as Date
結(jié)果:
Date
--------------------------
2009-January-12
場(chǎng)景16
要顯示帶有短的月份名稱的日期,那么執(zhí)行下面的命令。
select dbo.format_date(GETDATE(),'YYYY-MON-DD') as Date
結(jié)果:
Date
------------------------
2009-Jan-12
場(chǎng)景17
要顯示帶有大寫的短的月份名稱的日期,那么執(zhí)行下面的命令。
select dbo.format_date(GETDATE(),'YYYY-MON-DD ucase') as Date
結(jié)果:
Date
----------------------
2009-JAN-12
場(chǎng)景18
要顯示帶有小寫的月份名稱的日期,那么執(zhí)行下面的命令。
select dbo.format_date(GETDATE(),'YYYY-MONTH-DD lcase') as Date
結(jié)果:
Date
-------------------
2009-january-12
場(chǎng)景19
如果你不傳遞參數(shù),那么這個(gè)函數(shù)使用默認(rèn)的格式化日期和時(shí)間的方法。執(zhí)行下面的命令:
select dbo.format_date(NULL,NULL)
select dbo.format_date(NULL,'YYYY')
select dbo.format_date(getdate(),NULL)
結(jié)果:
Date
-----------------------
2009-01-12 11:29:17 PM
Year
-----------------------
2009
Date
-----------------------
2009-01-12 11:29:17 PM
這篇文章介紹了怎樣創(chuàng)建一個(gè)命令函數(shù)來獲得不同國家和應(yīng)用程序所要求的大多數(shù)日期格式。
【編輯推薦】