SQL Server 2008中的创建格式化日期

让我们来创建dbo.format_date 函数,如下所示。

  1. /****** Object: UserDefinedFunction [dbo].[format_date]   
  2. Script Date: 05/12/2009 23:19:35 ******/  
  3.  
  4. IF EXISTS (SELECT * FROM sys.objects  
  5.  
  6. WHERE object_id = OBJECT_ID(N'[dbo].[format_date]')  
  7.  
  8. AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))  
  9.  
  10. DROP FUNCTION [dbo].[format_date]  
  11.  
  12. GO  
  13.  
  14. /****** Object: UserDefinedFunction [dbo].[format_date]  
  15.  
  16. Script Date: 05/12/2009 23:19:18 ******/  
  17.  
  18. SET ANSI_NULLS ON 
  19.  
  20. GO  
  21.  
  22. SET QUOTED_IDENTIFIER ON 
  23.  
  24. GO  
  25.  
  26. SET CONCAT_NULL_YIELDS_NULL OFF 
  27.  
  28. go  
  29.  
  30. CREATE function [dbo].[format_date]  
  31.  
  32. (@inputdate datetime ,@format varchar(500))  
  33.  
  34. returns varchar(500)  
  35.  
  36. as 
  37.  
  38. begin 
  39.  
  40. declare @year varchar(4) --YYYY  
  41.  
  42. declare @shortyear varchar(4) --Yr  
  43.  
  44. declare @quarter varchar(4) --QQ  
  45.  
  46. declare @month varchar(2) --MM  
  47.  
  48. declare @week varchar(2) --WW  
  49.  
  50. declare @day varchar(2) --DD  
  51.  
  52. declare @24hours varchar(2) --24HH  
  53.  
  54. declare @12hours varchar(2) --HH  
  55.  
  56. declare @minutes varchar(2) --MI  
  57.  
  58. declare @seconds varchar(2) --SS  
  59.  
  60. declare @milliseconds varchar(3) --MS  
  61.  
  62. declare @microseconds varchar(6) --MCS  
  63.  
  64. declare @nanoseconds varchar(9) --NS  
  65.  
  66. declare @dayname varchar(15) --DAY  
  67.  
  68. declare @monthname varchar(15) --MONTH  
  69.  
  70. declare @shortmonthname varchar(15) --MON  
  71.  
  72. declare @AMPM varchar(15) --AMPM  
  73.  
  74. declare @TZ varchar(15) --TZ  
  75.  
  76. declare @UNIXPOSIX varchar(15) --UNIXPOSIX  
  77.  
  78. --UCASE  
  79.  
  80. --LCASE  
  81.  
  82. declare @formatteddate varchar(500)  
  83.  
  84. --Assign current date and time to  
  85.  
  86. if (@inputdate is NULL or @inputdate ='')  
  87.  
  88. begin 
  89.  
  90. set @inputdate = getdate()  
  91.  
  92. end 
  93.  
  94. if (@format is NULL or @format ='')  
  95.  
  96. begin 
  97.  
  98. set @format ='YYYY-MM-DD 12HH:MI:SS AMPM' 
  99.  
  100. end 

#p#

 

  1. --set all values   
  2. set @year = convert(varchar(4),year(@inputdate))  
  3.  
  4. set @shortyear = right(@year,2)  
  5.  
  6. set @quarter = convert(varchar(1),datepart(QQ,(@inputdate)))  
  7.  
  8. set @month = right('0'+convert(varchar(2),month(@inputdate)),2)  
  9.  
  10. set @week = right('0'+convert(varchar(2),datepart(ww,(@inputdate))),2)  
  11.  
  12. set @day = right('0'+convert(varchar(2),day(@inputdate)),2)  
  13.  
  14. set @24hours = right('0'+convert(varchar(2),datepart(hh,@inputdate)),2)  
  15.  
  16. set @TZ = convert(varchar(10),datename(TZ,convert(varchar(20),@inputdate)))  
  17.  
  18. set @UNIXPOSIX = convert(varchar(15),datediff(ss,convert(datetime,'01/01/1970 00:00:000'),@inputdate))  
  19.  
  20. if datepart(hh,@inputdate) >12  
  21.  
  22. begin 
  23.  
  24. set @12hours = right('0'+convert(varchar(2),datepart(hh,@inputdate)) -12,2)  
  25.  
  26. end 
  27.  
  28. else 
  29.  
  30. begin 
  31.  
  32. set @12hours = right('0'+convert(varchar(2),datepart(hh,@inputdate)) ,2)  
  33.  
  34. end 
  35.  
  36. if datepart(hh,@inputdate) >11  
  37.  
  38. begin 
  39.  
  40. set @AMPM ='PM' 
  41.  
  42. end 
  43.  
  44. else 
  45.  
  46. begin 
  47.  
  48. set @AMPM ='AM' 
  49.  
  50. end 
  51.  
  52. set @minutes = right('0'+convert(varchar(2),datepart(n,@inputdate)),2)  
  53.  
  54. set @seconds = right('0'+convert(varchar(2),datepart(ss,@inputdate)),2)  
  55.  
  56. set @milliseconds = convert(varchar(3),datepart(ms,@inputdate))  
  57.  
  58. set @microseconds = convert(varchar(6),datepart(mcs,@inputdate))  
  59.  
  60. set @nanoseconds = convert(varchar(9),datepart(ns,@inputdate))  
  61.  
  62. set @dayname = datename(weekday,@inputdate)  
  63.  
  64. set @monthname = datename(mm,@inputdate)  
  65.  
  66. set @shortmonthname= left(datename(mm,@inputdate),3)  
  67.  
  68. set @formatteddate = @format  
  69.  
  70. set @formatteddate=replace(@formatteddate,'MONTH',@monthname)  
  71.  
  72. set @formatteddate=replace(@formatteddate,'MON',@shortmonthname)  
  73.  
  74. set @formatteddate=replace(@formatteddate,'AMPM',@AMPM)  
  75.  
  76. set @formatteddate=replace(@formatteddate,'YYYY',@year)  
  77.  
  78. set @formatteddate=replace(@formatteddate,'Yr',@shortyear)  
  79.  
  80. set @formatteddate=replace(@formatteddate,'QQ',@quarter)  
  81.  
  82. set @formatteddate=replace(@formatteddate,'WW',@week)  
  83.  
  84. set @formatteddate=replace(@formatteddate,'MM',@month)  
  85.  
  86. set @formatteddate=replace(@formatteddate,'DD',@Day)  
  87.  
  88. set @formatteddate=replace(@formatteddate,'24HH',@24hours)  
  89.  
  90. set @formatteddate=replace(@formatteddate,'12HH',@12hours)  
  91.  
  92. set @formatteddate=replace(@formatteddate,'Mi',@minutes)  
  93.  
  94. set @formatteddate=replace(@formatteddate,'SS',@seconds)  
  95.  
  96. set @formatteddate=replace(@formatteddate,'MS',@milliseconds)  
  97.  
  98. set @formatteddate=replace(@formatteddate,'MCS',@microseconds)  
  99.  
  100. set @formatteddate=replace(@formatteddate,'NS',@nanoseconds)  
  101.  
  102. set @formatteddate=replace(@formatteddate,'DAY',@dayname)  
  103.  
  104. set @formatteddate=replace(@formatteddate,'TZ',@TZ)  
  105.  
  106. set @formatteddate=replace(@formatteddate,'UNIXPOSIX',@UNIXPOSIX)  
  107.  
  108. if charindex('ucase',@formatteddate)<>0  
  109.  
  110. begin 
  111.  
  112. set @formatteddate=replace(@formatteddate,'ucase','')  
  113.  
  114. set @formatteddate=upper(@formatteddate)  
  115.  
  116. end 
  117.  
  118. if charindex('lcase',@formatteddate)<>0   
  119.  
  120. begin 
  121.  
  122. set @formatteddate=replace(@formatteddate,'lcase','')  
  123.  
  124. set @formatteddate=lower(@formatteddate)  
  125.  
  126. end 
  127.  
  128. return @formatteddate  
  129.  
  130. end 
  131.  
  132. GO  

#p#

现在让我们使用不同的场景来看看这个函数的使用。下面关键字中的任何一个都可以联合使用来显示不同格式的日期。

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

#p#

场景 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

#p#

场景 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

这篇文章介绍了怎样创建一个命令函数来获得不同国家和应用程序所要求的大多数日期格式。

【编辑推荐】

  1. 在T-SQL中使用临时表的注意事项
  2. SQL Server数据库管理常用的SQL和T-SQL语句(1)
  3. 用T-SQL操作面试SQL Server开发人员(1)
  4. SQL Server 2005中的T-SQL
  5. T-SQL实用例句

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/254869.html<

(0)
管理的头像管理
上一篇2025-04-30 14:02
下一篇 2025-04-30 14:04

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注