添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
暂无图片
1
暂无图片
暂无图片
暂无图片

使用SQL Server进行日期和时间转换

沙沃兴 2023-02-04
683

在许多情况下,日期和时间不会以你希望的格式出现,查询的输出结果也不符合查看它的人的需求。一种选择是在应用程序本身中格式化数据。 另一种选择是使用 SQL Server 提供的内置函数来格式化日期字符串。


SQL Server 提供了许多选项,从表中可用于在输入文件(Excel、CSV 等)或日期列中设置 SQL 查询和存储过程中的日期/时间字符串的格式 (datetime, datetime2, smalldatetime等)。 首先要考虑的因素之一是所需的实际日期/时间值。最常见的 是使用datedate() 的当前日期/时间。这根据服务器的日期和时间提供了当前日期和时间。如果是通用日期/时间 (UTC) 是必需的,然后应该使用 getutcdate(). 要格式化日期,将请求的日期转换为字符串并指定相应的格式数字 到所需的格式。

如何在 SQL Server 中获取不同的日期格式

  1. 使用Select语句和Convert函数,以及日期格式的选项转换为所需的日期值。
  2. 要获取 YYYY-MM-DD,请使用此 T-SQL 语法 select convert(varchar,getdate(),23)。
  3. 若要获取 MM/DD/YY,请使用此 T-SQL 语法,select convert(varchar,getdate(),1)。
  4. 查看下面的图表以获取所有格式选项的列表

下面是 SQL 日期格式的列表和输出示例。使用的日期 所有这些示例都是2022-12-30 00:38:54.840"。

DATE ONLY FORMATS
Format # Query Format Sample
1 select convert(varchar, getdate(), 1) mm/dd/yy 12/30/22
2 select convert(varchar, getdate(), 2) yy.mm.dd 22.12.30
3 select convert(varchar, getdate(), 3) dd/mm/yy 30/12/22
4 select convert(varchar, getdate(), 4) dd.mm.yy 30.12.22
5 select convert(varchar, getdate(), 5) dd-mm-yy 30-12-22
6 select convert(varchar, getdate(), 6) dd-Mon-yy 30 Dec 22
7 select convert(varchar, getdate(), 7) Mon dd, yy Dec 30, 22
10 select convert(varchar, getdate(), 10) mm-dd-yy 12-30-22
11 select convert(varchar, getdate(), 11) yy/mm/dd 22/12/30
12 select convert(varchar, getdate(), 12) yymmdd 221230
23 select convert(varchar, getdate(), 23) yyyy-mm-dd 2022-12-30
31 select convert(varchar, getdate(), 31) yyyy-dd-mm 2022-30-12
32 select convert(varchar, getdate(), 32) mm-dd-yyyy 12-30-2022
33 select convert(varchar, getdate(), 33) mm-yyyy-dd 12-2022-30
34 select convert(varchar, getdate(), 34) dd-mm-yyyy 30-12-2022
35 select convert(varchar, getdate(), 35) dd-yyyy-mm 30-2022-12
101 select convert(varchar, getdate(), 101) mm/dd/yyyy 12/30/2022
102 select convert(varchar, getdate(), 102) yyyy.mm.dd 2022.12.30
103 select convert(varchar, getdate(), 103) dd/mm/yyyy 30/12/2022
104 select convert(varchar, getdate(), 104) dd.mm.yyyy 30.12.2022
105 select convert(varchar, getdate(), 105) dd-mm-yyyy 30-12-2022
106 select convert(varchar, getdate(), 106) dd Mon yyyy 30 Dec 2022
107 select convert(varchar, getdate(), 107) Mon dd, yyyy Dec 30, 2022
110 select convert(varchar, getdate(), 110) mm-dd-yyyy 12-30-2022
111 select convert(varchar, getdate(), 111) yyyy/mm/dd 2022/12/30
112 select convert(varchar, getdate(), 112) yyyymmdd 20221230
TIME ONLY FORMATS
8 select convert(varchar, getdate(), 8) hh:mm:ss 00:38:54
14 select convert(varchar, getdate(), 14) hh:mm:ss:nnn 00:38:54:840
24 select convert(varchar, getdate(), 24) hh:mm:ss 00:38:54
108 select convert(varchar, getdate(), 108) hh:mm:ss 00:38:54
114 select convert(varchar, getdate(), 114) hh:mm:ss:nnn 00:38:54:840
DATE & TIME FORMATS
0 select convert(varchar, getdate(), 0) Mon dd yyyy hh:mm AM/PM Dec 30 2022 12:38AM
9 select convert(varchar, getdate(), 9) Mon dd yyyy hh:mm:ss:nnn AM/PM Dec 30 2022 12:38:54:840AM
13 select convert(varchar, getdate(), 13) dd Mon yyyy hh:mm:ss:nnn AM/PM 30 Dec 2022 00:38:54:840AM
20 select convert(varchar, getdate(), 20) yyyy-mm-dd hh:mm:ss 2022-12-30 00:38:54
21 select convert(varchar, getdate(), 21) yyyy-mm-dd hh:mm:ss:nnn 2022-12-30 00:38:54.840
22 select convert(varchar, getdate(), 22) mm/dd/yy hh:mm:ss AM/PM 12/30/22 12:38:54 AM
25 select convert(varchar, getdate(), 25) yyyy-mm-dd hh:mm:ss:nnn 2022-12-30 00:38:54.840
26 select convert(varchar, getdate(), 26) yyyy-dd-mm hh:mm:ss:nnn 2022-30-12 00:38:54.840
27 select convert(varchar, getdate(), 27) mm-dd-yyyy hh:mm:ss:nnn 12-30-2022 00:38:54.840
28 select convert(varchar, getdate(), 28) mm-yyyy-dd hh:mm:ss:nnn 12-2022-30 00:38:54.840
29 select convert(varchar, getdate(), 29) dd-mm-yyyy hh:mm:ss:nnn 30-12-2022 00:38:54.840
30 select convert(varchar, getdate(), 30) dd-yyyy-mm hh:mm:ss:nnn 30-2022-12 00:38:54.840
100 select convert(varchar, getdate(), 100) Mon dd yyyy hh:mm AM/PM Dec 30 2022 12:38AM
109 select convert(varchar, getdate(), 109) Mon dd yyyy hh:mm:ss:nnn AM/PM Dec 30 2022 12:38:54:840AM
113 select convert(varchar, getdate(), 113) dd Mon yyyy hh:mm:ss:nnn 30 Dec 2022 00:38:54:840
120 select convert(varchar, getdate(), 120) yyyy-mm-dd hh:mm:ss 2022-12-30 00:38:54
121 select convert(varchar, getdate(), 121) yyyy-mm-dd hh:mm:ss:nnn 2022-12-30 00:38:54.840
126 select convert(varchar, getdate(), 126) yyyy-mm-dd T hh:mm:ss:nnn 2022-12-30T00:38:54.840
127 select convert(varchar, getdate(), 127) yyyy-mm-dd T hh:mm:ss:nnn 2022-12-30T00:38:54.840
ISLAMIC CALENDAR DATES
130 select convert(nvarchar, getdate(), 130) dd mmm yyyy hh:mi:ss:nnn AM/PM date output
131 select convert(nvarchar, getdate(), 131) dd mmm yyyy hh:mi:ss:nnn AM/PM 10/12/1444 12:38:54:840AM


您还可以在不分割字符的情况下格式化日期或时间,以及连接日期和时间字符串:

ample statement Format Output
select replace(convert(varchar, getdate(),101),'/','') mmddyyyy 12302022
select replace(convert(varchar, getdate(),101),'/','') + replace(convert(varchar, getdate(),108),':','') mmddyyyyhhmmss 12302022004426


如果要获取所有有效日期和时间格式的列表,可以使用 代码,并将@date更改为getdate() 或您要使用的任何其他日期。 这将仅输出有效格式。

DECLARE @counter INT = 0
DECLARE @date DATETIME = '2006-12-30 00:38:54.840'
CREATE TABLE #dateFormats (dateFormatOption int, dateOutput nvarchar(40))
WHILE (@counter <= 150 )
BEGIN
   BEGIN TRY
      INSERT INTO #dateFormats
      SELECT CONVERT(nvarchar, @counter), CONVERT(nvarchar,@date, @counter) 
      SET @counter = @counter + 1
   END TRY
   BEGIN CATCH;
      SET @counter = @counter + 1
      IF @counter >= 150
      BEGIN
         BREAK