smalldatetime (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics 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-061900-01-01

1900 年 1 月 1 日到 2079 年 6 月 6 日
时间范围 通过 23:59:5900: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 将会拒绝它无法识别为日期或时间的所有值。 有关在日期和时间数据中使用 CASTCONVERT 函数的信息,请参阅 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(nsmalldatetime 值将复制到 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