資料型別
範圍精確度
datetime
2023年1月1日至2023年12月31日
3.33毫秒
smalldatetime
2023年1月1日至2023年6月6日
1分鐘1753的由來:
這個限制**於歷史原因.
歷史上,在西方有兩種曆法制度:
儒略曆(julian calendar)
格里曆(gregorian calendar)
二種曆法對於同一天的記法,相差10到13天。所以,兩種曆法轉換時,需要計算差值。
2023年,英國對曆法進行了統一轉換。 (在這一年的,1752-9-2日的下一天是1752-9-14)。
如果儲存2023年之前的日期,必須說明是哪種曆法制度,才能夠得到準確的時間日期。
所以,sybase及microsoft sql server都2023年最為最早的日期。(有根據的猜測)
儲存格式
與1900-1-1相差的天數
從午夜0點開始
長度datetime
4位元組4位元組 [以3.333毫秒為單位的時間]
8位元組smalldatetime
2位元組2位元組 [以分鐘為單位]
4位元組
[取整問題]
由於datetime百分之三秒以及smalldatetime分鐘的單位限制。導致字串與日期時間型別轉換時,會發生取整問題。
例如:declare @value varchar(20)
set @value = '20100625 21:12:51:001'
select
convert(datetime,@value)
select
cast(@value as datetime)
--2010-06-25 21:12:51.000 注意這裡毫秒位置變為了000
select
cast(@value as smalldatetime
) --2010-06-25 21:13:00 注意這裡分鐘不是12
取整的原則
捨入到最近的可以被表示的datetime值。
毫秒部分的匹配規則為:[0-9][0-9][037]
0,1 捨入為0 || 2,3,4捨入為3 || 5,6,7,8捨入為7 || 9捨入為0
where dt >= '20100625 00:00:00.000'
and dt < '20100626 00:00:00.000'
sql2005未分離的日期和時間
sql2005沒有單獨的提供時間或日期的資料型別。單獨獲取日期需要用到以下方法:
select
dateadd(d,datediff(d,0,getdate()),0)
select
cast(convert(char(8),getdate(),112)as datetime)
--2010-06-25 00:00:00.000
SQL 2005 資料型別
1.用varchar max 代替text varchar 的最大長度為 8000 但是varchar max 則可以儲存多達 2g的資料,因此其作用相當於 sql 2000 中的text 但是微軟可能會後續的 sql server 版本中移除 text 型別,從現在就應該用 varchar max...
日期和時間資料型別
日期和時間資料型別包括 datetime 和smalldatetime 兩種型別 日期和時間資料型別由有效的日期和時間組成。例如,有效的日期和時間資料報括 4 01 98 12 15 00 00 00 pm 和 1 28 29 15 01am 8 17 98 前乙個資料型別是日期在前,時間在後乙個資...
sql2005資料庫資料型別
sql server 2005的資料型別與sql 2000有一些不同,在建立表時,列的資料型別需要注意幾點 找到這些資料是因為在儲存過程裡面定義區域性變數的時候使用ntext,text,image型別的會出現錯誤。把問題發到鄭州俱樂部的群裡面,大家真當作一回事情討論了一番。本來還以為定義成varch...