在 SQL Server 中,日期和时间数据类型用于存储日期和时间信息。这些数据类型包括 DATE
、TIME
、DATETIME
、DATETIME2
和 DATETIMEOFFSET
。每种类型都有其特定的用途和存储格式。
1. DATE
-
用途:用于存储日期信息,格式为 YYYY-MM-DD。
-
存储大小:3 字节。
-
范围:0001-01-01 到 9999-12-31。
2. TIME
-
用途:用于存储时间信息,不包含日期部分。
-
存储大小:3-5 字节(取决于精度)。
-
范围:00:00:00.0000000 到 23:59:59.9999999。
3. DATETIME
-
用途:用于存储日期和时间信息。
-
存储大小:8 字节。
-
范围:1753-01-01 到 9999-12-31 23:59:59.997。
4. DATETIME2
-
用途:用于存储日期和时间信息,比
DATETIME
提供更高的精度和范围。 -
存储大小:6-8 字节(取决于精度)。
-
范围:0001-01-01 00:00:00.0000000 到 9999-12-31 23:59:59.9999999。
5. DATETIMEOFFSET
-
用途:用于存储日期和时间信息,包含时区偏移量。
-
存储大小:8-10 字节(取决于精度)。
-
范围:0001-01-01 00:00:00.0000000 +- 14:00 到 9999-12-31 23:59:59.9999999 +- 14:00。
常用函数
SQL Server 提供了许多用于处理日期和时间的函数,以下是一些常用的:
-
GETDATE():返回当前日期和时间。
-
DATEADD():向日期添加指定的时间间隔。
-
DATEDIFF():计算两个日期之间的差异。
-
DATENAME():返回日期部分的名称,如年、月、日等。
-
DATEPART():返回日期的特定部分,如年、月、日等。
-
CONVERT():将日期和时间转换为不同的格式。
示例
-
插入当前日期和时间:
INSERT INTO YourTable (DateTimeColumn)
VALUES (GETDATE());
-
计算日期差:
SELECT DATEDIFF(day, '2024-01-01', GETDATE()) AS DaysSinceStartOfYear;
-
添加天数到日期:
SELECT DATEADD(day, 10, '2024-08-01') AS NewDate;
-
格式化日期:
SELECT CONVERT(VARCHAR, GETDATE(), 120) AS FormattedDate; -- 120 表示 yyyy-mm-dd hh:mi:ss(24h)
-
提取日期部分:
SELECT DATENAME(year, GETDATE()) AS Year,
DATENAME(month, GETDATE()) AS Month,
DATENAME(day, GETDATE()) AS Day;
注意事项
-
当处理日期和时间时,确保考虑时区和夏令时的影响。
-
在进行日期运算时,了解不同数据类型之间的差异和限制。
-
使用
DATETIME2
和DATETIMEOFFSET
可以避免DATETIME
的一些精度限制。
常用的格式化日期
在 SQL Server 中,格式化日期和时间数据通常使用 CONVERT
函数或 FORMAT
函数。以下是一些常用的日期格式化示例:
使用 CONVERT
函数
CONVERT
函数可以将日期和时间数据转换为不同的格式。格式代码决定了输出的样式。
-
格式代码 120:
yyyy-mm-dd hh:mi:ss(24h)
(24小时制)SELECT CONVERT(varchar, GETDATE(), 120) AS FormattedDate;
-
格式代码 101:
mm/dd/yyyy
SELECT CONVERT(varchar, GETDATE(), 101) AS FormattedDate;
-
格式代码 103:
dd/mm/yyyy hh:mi:ss(24h)
SELECT CONVERT(varchar, GETDATE(), 103) AS FormattedDate;
-
格式代码 104:
dd-mm-yyyy
SELECT CONVERT(varchar, GETDATE(), 104) AS FormattedDate;
-
格式代码 105:
hh:mi:ss(24h)
SELECT CONVERT(varchar, GETDATE(), 105) AS FormattedTime;
-
格式代码 110:
yyyy-mm-dd
SELECT CONVERT(varchar, GETDATE(), 110) AS FormattedDate;
-
格式代码 112:
yyyy/mm/dd
SELECT CONVERT(varchar, GETDATE(), 112) AS FormattedDate;
-
格式代码 120:
yyyy-mm-dd hh:mi:ss(24h)
SELECT CONVERT(varchar, GETDATE(), 120) AS FormattedDateTime;
使用 FORMAT
函数
FORMAT
函数提供了更灵活的日期和时间格式化选项,允许你指定自定义格式字符串。
-
自定义格式
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd HH:mm:ss');
-
输出为日期
SELECT FORMAT(GETDATE(), 'yyyy-MM-dd');
-
输出为时间
SELECT FORMAT(GETDATE(), 'HH:mm:ss');
-
输出为星期几
SELECT FORMAT(GETDATE(), 'dddd, dd MMMM yyyy');
-
输出为特定文化格式
SELECT FORMAT(GETDATE(), 'fulldate', 'de-DE'); -- 德国日期格式
注意事项
-
FORMAT
函数比CONVERT
函数提供了更多的灵活性和自定义选项。 -
FORMAT
函数返回的是nvarchar
类型的数据。 -
使用
FORMAT
函数时,你可以指定文化信息来获取特定地区格式的日期和时间。