在SQL Server中,日期和时间数据类型用于存储日期和时间信息。SQL Server提供了多种日期和时间数据类型,每种类型都有其特定的用途和存储范围。
-- DATE类型
DECLARE @myDate DATE = '2023-05-15';
-- DATETIME类型
DECLARE @myDateTime DATETIME = '2023-05-15 14:30:00';
-- DATETIME2类型
DECLARE @myDateTime2 DATETIME2 = '2023-05-15 14:30:00.1234567';
-- 当前系统日期和时间
SELECT GETDATE(); -- DATETIME类型
SELECT SYSDATETIME(); -- DATETIME2类型
SELECT CURRENT_TIMESTAMP; -- ANSI SQL标准,等同于GETDATE()
-- 仅日期部分
SELECT CAST(GETDATE() AS DATE);
SELECT CONVERT(DATE, GETDATE());
-- 仅时间部分
SELECT CAST(GETDATE() AS TIME);
SELECT CONVERT(TIME, GETDATE());
-- 使用DATEFROMPARTS (SQL Server 2012+)
SELECT DATEFROMPARTS(2023, 5, 15); -- 返回DATE类型
-- 使用DATETIMEFROMPARTS
SELECT DATETIMEFROMPARTS(2023, 5, 15, 14, 30, 0, 0); -- 返回DATETIME类型
-- 使用DATETIME2FROMPARTS
SELECT DATETIME2FROMPARTS(2023, 5, 15, 14, 30, 0, 500, 3); -- 精度为3表示毫秒部分有3位
-- 使用CONVERT函数
SELECT CONVERT(DATETIME, '05/15/2023', 101); -- 美国格式 mm/dd/yyyy
SELECT CONVERT(DATETIME, '15/05/2023', 103); -- 英国/法国格式 dd/mm/yyyy
-- 使用PARSE函数 (SQL Server 2012+)
SELECT PARSE('15 May 2023' AS DATE USING 'en-US');
-- 使用DATETIMEOFFSETFROMPARTS
SELECT DATETIMEOFFSETFROMPARTS(2023, 5, 15, 14, 30, 0, 500, 8, 0, 3);
-- 使用SYSDATETIMEOFFSET获取当前带时区的日期时间
SELECT SYSDATETIMEOFFSET();
-- 使用SWITCHOFFSET转换时区
SELECT SWITCHOFFSET(SYSDATETIMEOFFSET(), '-05:00');
-- 添加天数
SELECT DATEADD(DAY, 7, GETDATE());
-- 计算日期差
SELECT DATEDIFF(DAY, '2023-01-01', '2023-12-31');
-- 获取日期部分
SELECT YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE());
-- 获取一周中的某天
SELECT DATEPART(WEEKDAY, GETDATE());
问题1:日期格式转换错误
-- 错误示例
DECLARE @date DATETIME = '15/05/2023'; -- 可能导致错误,取决于语言设置
-- 解决方案:使用明确的格式或CONVERT函数
DECLARE @date DATETIME = CONVERT(DATETIME, '15/05/2023', 103);
问题2:日期范围超出限制
-- 错误示例
DECLARE @date DATETIME = '1000-01-01'; -- DATETIME的最小值是1753年
-- 解决方案:使用DATE或DATETIME2类型
DECLARE @date DATE = '1000-01-01';
问题3:毫秒精度丢失
-- DATETIME精度只有约3.33毫秒
DECLARE @dt DATETIME = '2023-05-15 14:30:00.123';
-- 解决方案:使用DATETIME2
DECLARE @dt2 DATETIME2(3) = '2023-05-15 14:30:00.123';
没有搜到相关的文章