smalldatetime (Transact-SQL)
适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
Analytics Platform System (PDW)
Microsoft Fabric 中的 SQL 数据库
定义结合了一天中的时间的日期。 时间基于 24 小时,秒始终为零(:00
),不带小数秒。
注意
对新工作使用 时间、日期、datetime2,以及 datetimeoffset 数据类型。 这些类型与 SQL 标准保持一致,因为它们更易于移植。 time、datetime2 和 datetimeoffset 提供更高精度的秒数 。 datetimeoffset 为全局部署的应用程序提供时区支持 。
smalldatetime 说明
属性 | 值 |
---|---|
语法 | smalldatetime |
使用情况 | DECLARE @MySmallDateTime SMALLDATETIME; CREATE TABLE Table1 (Column1 SMALLDATETIME); |
默认字符串文本格式 (用于下级客户端) |
不适用 |
日期范围 | 通过 2079-06-06 1900-01-01 1900 年 1 月 1 日到 2079 年 6 月 6 日 |
时间范围 | 通过 23:59:59 00:00:00 2024-05-09 23:59:59 舍入为 2024-05-10 00:00:00 |
元素范围 |
yyyy 是四位数,范围为 1900 到 2079 年,表示一年。MM 是两位数,范围为 01 到 12,表示指定年份中的一个月。dd 是两位数,范围从 01 到 31,具体取决于月份,表示指定月份的一天。HH 是两位数,范围为 00 到 23,表示小时。mm 是两位数,范围为 00 到 59,表示分钟。ss 是两位数,范围为 00 到 59,表示第二位。 值为 29.998 秒或更小值时会向下舍入到最接近的分钟数。 值为 29.999 秒或更大值时会向上舍入到最接近的分钟数。 |
字符长度 | 最高 19 位 |
存储大小 | 4 个字节,固定 |
准确性 | 一分钟 |
默认值 | 1900-01-01 00:00:00 |
日历 | 公历 (不包括完整的年份范围。) |
用户定义的小数秒精度 | 否 |
时区偏移感知和保留 | 否 |
夏令时感知 | 否 |
ANSI 和 ISO 8601 合规性
smalldatetime 不遵从 ANSI 或 ISO 8601。
转换日期和时间数据
当转换为日期和时间数据类型时,SQL Server 将会拒绝它无法识别为日期或时间的所有值。 有关在日期和时间数据中使用 CAST
和 CONVERT
函数的信息,请参阅 CAST 和 CONVERT。
将 smalldatetime 转换为其他日期和时间类型
本部分介绍当 smalldatetime 数据类型转换为其他日期和时间数据类型时发生的情况。
转换成 date 时,会复制年、月和日。 以下代码显示将 smalldatetime 值转换为 日期 值的结果。
DECLARE @smalldatetime AS SMALLDATETIME = '1955-12-13 12:43:10';
DECLARE @date AS DATE = @smalldatetime;
SELECT @smalldatetime AS '@smalldatetime',
@date AS 'date';
下面是结果集。
@smalldatetime date
--------------------- ----------
1955-12-13 12:43:00 1955-12-13
当转换为 时间(n)时,将复制小时、分钟和秒。 小数秒设置为 0
。 以下代码显示了将 smalldatetime 值转换为 time(4) 值的结果。
DECLARE @smalldatetime AS SMALLDATETIME = '1955-12-13 12:43:10';
DECLARE @time AS TIME (4) = @smalldatetime;
SELECT @smalldatetime AS '@smalldatetime',
@time AS 'time';
下面是结果集。
@smalldatetime time
----------------------- -------------
1955-12-13 12:43:00 12:43:00.0000
转换成 datetime 时,会将 smalldatetime 值复制到 datetime 值 。 小数秒设置为 0
。 以下代码显示将 smalldatetime 值转换为 日期/时间 值的结果。
DECLARE @smalldatetime AS SMALLDATETIME = '1955-12-13 12:43:10';
DECLARE @datetime AS DATETIME = @smalldatetime;
SELECT @smalldatetime AS '@smalldatetime',
@datetime AS 'datetime';
下面是结果集。
@smalldatetime datetime
----------------------- -----------------------
1955-12-13 12:43:00 1955-12-13 12:43:00.000
对于转换为 datetimeoffset(n),smalldatetime 值将复制到 datetimeoffset(n) 值。 小数秒设置为 0
,时区偏移量设置为 +00:0
。 以下代码显示了将 smalldatetime 值转换为 datetimeoffset(4) 值的结果。
DECLARE @smalldatetime AS SMALLDATETIME = '1955-12-13 12:43:10';
DECLARE @datetimeoffset AS DATETIMEOFFSET (4) = @smalldatetime;
SELECT @smalldatetime AS '@smalldatetime',
@datetimeoffset AS 'datetimeoffset(4)';
下面是结果集。
@smalldatetime datetimeoffset(4)
--------------------- ------------------------------
1955-12-13 12:43:00 1955-12-13 12:43:00.0000 +00:0
转换成 datetime2(n) 时,会将 smalldatetime 值复制到 datetime2(n) 值 。 小数秒设置为 0
。 以下代码显示了将 smalldatetime 值转换为 datetime2(4) 值的结果。
DECLARE @smalldatetime AS SMALLDATETIME = '1955-12-13 12:43:10';
DECLARE @datetime2 AS DATETIME2 (4) = @smalldatetime;
SELECT @smalldatetime AS '@smalldatetime',
@datetime2 AS ' datetime2(4)';
下面是结果集。
@smalldatetime datetime2(4)
--------------------- ------------------------
1955-12-13 12:43:00 1955-12-13 12:43:00.0000
示例
A. 将带秒的字符串文本强制转换为 smalldatetime
以下示例将字符串文本中的秒数转换为 smalldatetime
SELECT CAST ('2024-05-08 12:35:29' AS SMALLDATETIME),
CAST ('2024-05-08 12:35:30' AS SMALLDATETIME),
CAST ('2024-05-08 12:59:59.998' AS SMALLDATETIME);
输入 | Output |
---|---|
2024-05-08 12:35:29 |
2024-05-08 12:35:00 |
2024-05-08 12:35:30 |
2024-05-08 12:36:00 |
2024-05-08 12:59:59.998 |
2024-05-08 13:00:00 |
B. 比较日期和时间数据类型
下例比较了将一个字符串分别转换为各种 date 和 time 数据类型时所产生的结果 。
SELECT CAST ('2024-05-08 12:35:29.1234567 +12:15' AS TIME (7)) AS 'time',
CAST ('2024-05-08 12:35:29.1234567 +12:15' AS DATE) AS 'date',
CAST ('2024-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime',
CAST ('2024-05-08 12:35:29.123' AS DATETIME) AS 'datetime',
CAST ('2024-05-08 12:35:29.1234567 +12:15' AS DATETIME2 (7)) AS 'datetime2',
CAST ('2024-05-08 12:35:29.1234567 +12:15' AS DATETIMEOFFSET (7)) AS 'datetimeoffset';
数据类型 | Output |
---|---|
time | 12:35:29.1234567 |
date | 2024-05-08 |
smalldatetime | 2024-05-08 12:35:00 |
datetime | 2024-05-08 12:35:29.123 |
datetime2 | 2024-05-08 12:35:29.1234567 |
datetimeoffset | 2024-05-08 12:35:29.1234567 +12:15 |