适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
分析平台系统 (PDW)
Microsoft Fabric 预览版中的 SQL 数据库
定义结合了一天中的时间的日期。 时间基于 24 小时,秒始终为零(:00),不带小数秒。
Note
对新工作使用 时间、日期、datetime2,以及 datetimeoffset 数据类型。 这些类型与 SQL 标准保持一致,因为它们更易于移植。 time、datetime2 和 datetimeoffset 提供更高精度的秒数 。 datetimeoffset 为全局部署的应用程序提供时区支持 。
smalldatetime description
| Property | Value |
|---|---|
| Syntax | smalldatetime |
| Usage | DECLARE @MySmallDateTime SMALLDATETIME;CREATE TABLE Table1 (Column1 SMALLDATETIME); |
|
默认字符串文本格式 (用于下级客户端) |
Not applicable |
| Date range | 通过 1900-01-012079-06-061900 年 1 月 1 日到 2079 年 6 月 6 日 |
| Time range | 通过 00:00:0023:59:592024-05-09 23:59:59 舍入为 2024-05-10 00:00:00 |
| Element ranges |
yyyy 是四位数,范围为 1900 到 2079 年,表示一年。MM 是两位数,范围为 01 到 12,表示指定年份中的一个月。dd 是两位数,范围从 01 到 31,具体取决于月份,表示指定月份的一天。HH 是两位数,范围为 00 到 23,表示小时。mm 是两位数,范围为 00 到 59,表示分钟。ss 是两位数,范围为 00 到 59,表示第二位。 值为 29.998 秒或更小值时会向下舍入到最接近的分钟数。 值为 29.999 秒或更大值时会向上舍入到最接近的分钟数。 |
| Character length | 最高 19 位 |
| Storage size | 4 个字节,固定 |
| Accuracy | One minute |
| Default value | 1900-01-01 00:00:00 |
| Calendar | Gregorian (不包括完整的年份范围。) |
| 用户定义的小数秒精度 | No |
| 时区偏移感知和保留 | No |
| 夏令时感知 | No |
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
Examples
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);
| Input | 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';
| Data type | 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 |