ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SQL Server 2008中的格式化日期

SQL Server 2008中的格式化日期

原创 Linux操作系统 作者:iSQlServer 时间:2009-10-16 13:25:27 0 删除 编辑
我们都知道不同的国家要求不同的日期格式。不同的应用程序要求不同的日期格式。SQL Server数据库管理员和开发人员将函数convert()和其它日期函数例如datepart()、datename()等等一起使用来操纵输出的格式。这篇文章介绍怎样创建一个普通函数来获得不同国家和应用程序所要求的大多数格式。

  让我们来创建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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16436858/viewspace-616726/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-10-17

  • 博文量
    1319
  • 访问量
    2073940