適用於:
SQL Server
Azure SQL Database
Azure SQL 受控實例
Azure Synapse Analytics
分析平台系統 (PDW)

Microsoft Fabric
中的 SQL 分析端點
Microsoft Fabric

中的倉儲
Microsoft Fabric Preview 中的 SQL 資料庫
定義日期,並結合了 24 小時制的時間。
datetime2
可視為現有
datetime
類型的延伸,因其具有較大的日期範圍、較大的預設小數有效位數和選擇性的使用者指定有效位數。
datetime2 description
Property
Value
yyyy
是四位數的數字,範圍從
0001
到
9999
,代表一年。
MM
是兩位數的數字,範圍從
01
到
12
,代表指定年份中的月份。
dd
是兩位數的數字,範圍
01
從 到
31
,視月份而定,代表指定月份的一天。
HH
是兩位數的數字,範圍從
00
到
23
,代表小時。
mm
是兩位數的數字,範圍從
00
到
59
,代表分鐘。
ss
是兩位數的數字,範圍從
00
到
59
,代表第二個數位。
n*
是從
0
到
9999999
的零到七位數數位,代表小數秒。 在 Informatica 中,當 n
3
,小數秒會截斷。
Character length
最低 19 個位置 (
yyyy-MM-dd HH:mm:ss
) 至 27 個最大值 (
yyyy-MM-dd HH:mm:ss.0000000
)
Precision, scale
0 到 7 位數,精確度為 100 奈秒(100 ns)。 預設有效位數是 7 位數。
在 Microsoft Fabric 數據倉儲中,此精確度可以是 0 到 6 的整數,沒有預設值。 必須在 Microsoft網狀架構數據倉儲中指定有效位數。
儲存體大小
1
不到 3 個有效位數為 6 個位元組。
3 或4 個有效位數為 7 個位元組。
所有其他有效位數都需要8個字節。
Accuracy
100 nanoseconds
Default value
1900-01-01 00:00:00
Calendar
Gregorian
使用者自訂的小數秒數有效位數
時區位移感知和保留
日光節約感知
1
所提供值適用於未壓縮的資料列存放區。
使用數據壓縮
或
資料行存放區
可能會改變每個精確度的記憶體大小。 此外,磁碟和記憶體中的記憶體大小可能會有所不同。 例如,使用批次模式時,
datetime2
值在記憶體中一律需要 8 個位元組。
2
當 datetime2
值轉換成
varbinary
值時
,會將額外的位元組新增至
varbinary
值以儲存有效位數。
如需數據類型元數據,請參閱
sys.systypes
或
TYPEPROPERTY
。 有效位數和小數位數是某些日期和時間資料類型的變數。 若要取得數據行的有效位數和小數字數,請參閱
COLUMNPROPERTY
、
COL_LENGTH
或
sys.columns
。
下表列出
datetime2
支援的 ISO 8601 及 ODBC 字串常值格式。 如需 datetime2 日期和時間部分
的字母、數值、未分隔及時間格式的相關信息,請參閱
日期和時間。
ISO 8601
Descriptions
yyyy-MM-dd HH:mm:ss[.nnnnnnn] [+|-]hh:mm
SQL_WVARCHAR 或 SQL_VARCHAR
DBTYPE_WSTRor DBTYPE_STR
Java.sql.String
字串或 SqString
轉換日期和時間數據
當您轉換成日期和時間數據類型時,資料庫引擎 會拒絕無法辨識為日期或時間的所有值。 如需搭配日期和時間數據使用 CAST 和 CONVERT 函式的相關信息,請參閱
CAST 和 CONVERT
將其他日期和時間類型轉換為 datetime2 資料類型
本節描述當其他日期與時間資料類型轉換成
datetime2
資料類型時,可能發生的狀況。
從
date
轉換時,年、月、日都會複製。 時間元件會設定為 00:00:00.0000000。 下列程式碼顯示將
date
值轉換成
datetime2
值的結果。
DECLARE @date AS DATE = '12-21-16';
DECLARE @datetime2 AS DATETIME2 = @date;
SELECT @datetime2 AS '@datetime2',
@date AS '@date';
結果集如下所示。
@datetime2 @date
--------------------------- ----------
2016-12-21 00:00:00.0000000 2016-12-21
從 time(n)轉換時,會複製時間元件,並將日期元件設定為 1900-01-01
。 下列範例顯示將 time(7) 值轉換成 datetime2 值的結果。
DECLARE @time AS TIME (7) = '12:10:16.1234567';
DECLARE @datetime2 AS DATETIME2 = @time;
SELECT @datetime2 AS '@datetime2',
@time AS '@time';
結果集如下所示。
@datetime2 @time
--------------------------- ----------------
1900-01-01 12:10:16.1234567 12:10:16.1234567
從 smalldatetime 轉換時,會複製小時和分鐘。 秒和小數秒數會設定為 0。 下列程式碼顯示將 smalldatetime
值轉換成 datetime2
值的結果。
DECLARE @smalldatetime AS SMALLDATETIME = '12-01-16 12:32';
DECLARE @datetime2 AS DATETIME2 = @smalldatetime;
SELECT @datetime2 AS '@datetime2',
@smalldatetime AS '@smalldatetime';
結果集如下所示。
@datetime2 @smalldatetime
--------------------------- -----------------------
2016-12-01 12:32:00.0000000 2016-12-01 12:32:00
從 datetimeoffset(n) 轉換時,會複製日期和時間元件。 時區則會被截斷。 下列範例顯示將 datetimeoffset(7)
值轉換成 datetime2
值的結果。
DECLARE @datetimeoffset AS DATETIMEOFFSET (7) = '2016-10-23 12:45:37.1234567 +10:0';
DECLARE @datetime2 AS DATETIME2 = @datetimeoffset;
SELECT @datetime2 AS '@datetime2',
@datetimeoffset AS '@datetimeoffset';
結果集如下所示。
@datetime2 @datetimeoffset
--------------------------- ----------------------------------
2016-10-23 12:45:37.1234567 2016-10-23 12:45:37.1234567 +10:00
當轉換來自 datetime,會複製日期和時間。 小數有效位數會延伸至 7 位數。 下列範例顯示將 datetime
值轉換成 datetime2
值的結果。
DECLARE @datetime AS DATETIME = '2016-10-23 12:45:37.333';
DECLARE @datetime2 AS DATETIME2 = @datetime;
SELECT @datetime2 AS '@datetime2',
@datetime AS '@datetime';
結果集如下所示。
@datetime2 @datetime
----------------------- ---------------------------
2016-10-23 12:45:37.3333333 2016-10-23 12:45:37.333
使用 datetime 時明確轉換成 datetime2
在資料庫相容性層級 130 和更新版本下,從 datetime 到 datetime2 數據類型的隱含轉換會藉由考慮小數毫秒來提升精確度,進而產生不同的轉換值,如上一個範例所示。 每當 datetime 與 datetime2 數據類型之間存在混合比較案例時,請使用明確轉換成 datetime2數據類型。 如需詳細資訊,請參閱 SQL Server 和 Azure SQL 資料庫 處理某些數據類型和罕見作業的改善。
將字串常值轉換為 datetime2
如果整個字串皆是有效的格式,即可從字串常值轉換為日期與時間類型。 否則,就會引發執行階段錯誤。 不指定樣式的隱含轉換或明確轉換,從日期和時間類型到字串常值都是目前會話的預設格式。 下表是字串常值轉換為 datetime2 資料類型的規則。
輸入字串常值
datetime2(n)
ODBC DATE
ODBC 字串常值會對應到 datetime 資料類型。 從ODBC DATETIME
常值到 datetime2 類型的任何指派作業都會在 datetime 和這個類型之間產生隱含轉換,如轉換規則所定義。
ODBC TIME
請參閱上一個 ODBC DATE
規則。
ODBC DATETIME
請參閱上一個 ODBC DATE
規則。
僅限 DATE
元件 TIME
預設為 00:00:00
。
僅限 TIME
元件 DATE
預設為 1900-01-01
。
僅限 TIMEZONE
提供預設值。
DATE
+ TIME
Trivial.
DATE
+ TIMEZONE
Not allowed.
TIME
+ TIMEZONE
元件 DATE
預設為 1900-1-1。
TIMEZONE
會忽略輸入。
DATE
+ TIME
+ TIMEZONE
使用本機 DATETIME
。
Examples
下列範例會比較將字串轉換成各種 date 和 time 資料類型的結果。
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';
結果集如下所示。
Data type
Output