讓我們來建立dbo.format_date 函式,如下所示。
/****** 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
現在讓我們使用不同的場景來看看這個函式的使用。下面關鍵字中的任何一個都可以聯合使用來顯示不同格式的日期。
YYYY - YYYY格式的年份,包括百年
Yr - YY格式的年份
QQ - 顯示季度
MM - 顯示月份
WW - 顯示星期
DD - 顯示日子
24HH - 以24小時制的形式顯示小時
12HH - 以12小時制的形式顯示小時
MI - 顯示分鐘
SS - 顯示秒
MS - 顯示毫秒
MCS - 顯示微秒
NS - 顯示十億分之一秒
DAY - 顯示日子的名稱,例如:Monday
MONTH- - 顯示月份的名稱,例如:August
MON - 顯示短的月份名稱,例如:Aug
AMPM - 顯示AM/PM 用於12小時制格式
TZ - 顯示時間偏移
UNIXPOSIX - 顯示unix posix時間。秒數從1/1/1970開始
UCASE - 以大寫顯示結果
LCASE - 以小寫顯示結果
場景 1
如果你想以YYYY/MM/DD的形式顯示日期,那麼執行下面的命令。
select dbo.format_date(GETDATE(),'YYYY/MM/DD') as Date
結果:
Date
--------------
2009/01/12
場景 2
要以YYYY-MM-DD格式顯示日期,那麼執行下面的命令。
select dbo.format_date(GETDATE(),'YYYY-MM-DD') as Date
結果:
Date
-------------------
2009-01-12
場景 3
要顯示年份和季節,那麼執行下面的命令。
select dbo.format_date(GETDATE(),'Year: YYYY, Quarter: QQ ') as Date
結果:
Date
-----------------------
Year: 2009, Quarter: 1
場景 4
要以24小時制格式顯示時間,執行下面的命令。
select dbo.format_date(GETDATE(),'24HH:MI:SS') as Time
結果:
Time
------------------------
23:10:07
場景 5
要以12小時制格式顯示時間,執行下面的命令。
select dbo.format_date(GETDATE(),'12HH:MI:SS AMPM') as Time
結果:
Time
-----------------------
11:11:02 PM
場景 6
要以日期形式為YYYY/MM/DD 和時間形式為24小時制來顯示,那麼執行下面的命令。
select dbo.format_date(GETDATE(),'YYYY/MM/DD 24HH:MI:SS') as DateTime
結果:
DateTime
-----------------------
2009/01/12 23:11:44
場景 7
要以日期形式為YYYY/MM/DD和時間形式為12小時制來顯示,那麼執行下面的命令。
select dbo.format_date(GETDATE(),'YYYY/MM/DD 12HH:MI:SS AMPM') as DateTime
結果:
DateTime
-------------------------
2009/01/12 11:13:27 PM
場景 8
要以DD-MM-YY 的形式來顯示日期,那麼執行下面的命令。
select dbo.format_date(GETDATE(),'DD-MM-YR') as Date
結果:
Date
------------------------
12-01-09
場景 9
要以DDMMYY的形式顯示日期,那麼執行下面的命令。
select dbo.format_date(GETDATE(),'DDMMYR') as Date
結果:
Date
----------------------
120109
場景 10
要顯示日期和時間以你可以使用它來作為檔名稱字尾的形式,那麼執行下面的命令。
select dbo.format_date(GETDATE(),'YYYY_MM_DD_HH_MI_SS_MS_MCS_NS') as FileNameSuffix
結果:
FileNameSuffix
--------------------------------------------
2009_01_12_HH_16_18_200_200000_200000000
場景 11
要顯示日期、時間、月份名稱和日子的名稱,那麼執行下面的命令。
select dbo.format_date(GETDATE(),'DAY, MONTH DD, YYYY 12HH:MI:SS AMPM') as DateTime
結果:
DateTime
---------------------------------------
Monday, January 12, 2009 11:20:31 PM
場景 12
要以時間偏移量來顯示日期、時間、月份名稱和日子的名稱,那麼執行下面的命令。
select dbo.format_date(GETDATE(),'DAY MONTH DDth, YR 12HH:MI:SS TZ') as DateTime
結果:
DateTime
------------------------------------------
Monday January 12th, 09 11:21:42 +00:00
場景 13
要顯示unix posix時間,那麼執行下面的命令。
select dbo.format_date(GETDATE(),'Your Unix time is: UNIXPOSIX') as POSIX
結果:
POSIX
----------------------------------
Your Unix time is: 1231802580
場景 14
要顯示年份和星期,那麼執行下面的命令。
select dbo.format_date(GETDATE(),'Year: YYYY, Week: WW') as YearWeek
結果:
YearWeek
-------------------------
Year: 2009, Week: 03
場景15
要顯示帶有月份名稱的日期,那麼執行下面的命令。
select dbo.format_date(GETDATE(),'YYYY-MONTH-DD') as Date
結果:
Date
--------------------------
2009-January-12
場景16
要顯示帶有短的月份名稱的日期,那麼執行下面的命令。
select dbo.format_date(GETDATE(),'YYYY-MON-DD') as Date
結果:
Date
------------------------
2009-Jan-12
場景17
要顯示帶有大寫的短的月份名稱的日期,那麼執行下面的命令。
select dbo.format_date(GETDATE(),'YYYY-MON-DD ucase') as Date
結果:
Date
----------------------
2009-JAN-12
場景18
要顯示帶有小寫的月份名稱的日期,那麼執行下面的命令。
select dbo.format_date(GETDATE(),'YYYY-MONTH-DD lcase') as Date
結果:
Date
-------------------
2009-january-12
場景19
如果你不傳遞引數,那麼這個函式使用預設的格式化日期和時間的方法。執行下面的命令:
select dbo.format_date(NULL,NULL)
select dbo.format_date(NULL,'YYYY')
select dbo.format_date(getdate(),NULL)
結果:
Date
-----------------------
2009-01-12 11:29:17 PM
Year
-----------------------
2009
Date
-----------------------
2009-01-12 11:29:17 PM
這篇文章介紹了怎樣建立一個命令函式來獲得不同國家和應用程式所要求的大多數日期格式。
原文地址:http://database.ctocio.com.cn/68/8929568_4.shtml