SQL Server一共支持6种日期时间格式,分别是
- date
- datetime
- datetime2
- datetimeoffset
- samlldatetime
- time
date
date关键字定义一个日期类型,默认的字符串格式为"YYYY-MM-DD",可支持的范围为0001-01-01到9999-12-31,默认初值为1900-01-01。在数据库中占3个字节(定长)。
转换
time: Date类型不允许转换为Time类型
datetime:date类型的日期部分将被赋值到datetime类型的日期部分,datetime类型的time部分将设为0。
View Code
DECLARE @date date= '12-10-25'; DECLARE @datetime datetime= @date; SELECT @date AS '@date', @datetime AS '@datetime'; --Result --@date @datetime ------------ ----------------------- --2025-12-10 2025-12-10 00:00:00.000 -- --(1 row(s) affected)
smalldatetime:当date类型的值在smalldatetime能表示的范围内是,转换跟转换到datetime一致,否则则转换失败,引发242异常,并且smalldatetime类型的目标值将设为null。
View Code
DECLARE @date date= '1912-10-25'; DECLARE @smalldatetime smalldatetime = @date; SELECT @date AS '@date', @smalldatetime AS '@smalldatetime'; --Result --@date @smalldatetime ------------ ----------------------- --1912-10-25 1912-10-25 00:00:00 -- --(1 row(s) affected)
datetimeoffset:日期部分将使用date类型的日期部分的值,时间部分将被设置为 00:00.0000000 +00:00。
View Code
DECLARE @date date = '1912-10-25'; DECLARE @datetimeoffset datetimeoffset(3) = @date; SELECT @date AS '@date', @datetimeoffset AS '@datetimeoffset'; --Result --@date @datetimeoffset ------------ ------------------------------ --1912-10-25 1912-10-25 00:00:00.000 +00:00 -- --(1 row(s) affected)
datetime2(n):日期部分将使用date类型的日期部分的值,时间部分将被设置为 00:00.000000。
View Code
DECLARE @date date = '1912-10-25' DECLARE @datetime2 datetime2(3) = @date; SELECT @date AS '@date', @datetime2 AS '@datetime2(3)'; --Result --@date @datetime2(3) ------------ ----------------------- --1912-10-25 1912-10-25 00:00:00.000 -- --(1 row(s) affected)
Eg:
sql脚本:
View Code
SELECT CAST('2007-05-08 12:35:29. 1234567 +12:15' AS time(7)) AS 'time' ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS date) AS 'date' ,CAST('2007-05-08 12:35:29.123' AS smalldatetime) AS 'smalldatetime' ,CAST('2007-05-08 12:35:29.123' AS datetime) AS 'datetime' ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS datetime2(7)) AS 'datetime2' ,CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7)) AS 'datetimeoffset';
输出: