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

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

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