sql server使用 date 表示日期,time表示時間,使用datetime和datetime2表示日期和時間。
1,秒的精度
秒的精度是指tsql使用多少位小數,datetime資料型別秒的精度是3,datetime2和time可以控制秒的精度,語法是datetime2(n)和time(n),n的取值範圍是0-7,預設值是7。
2,datetime資料型別儲存日期和時間,需要8個位元組的固定儲存空間,預設的資料格式是yyyy-mm-dd hh:mm:ss.***,表示從2023年1月1日到2023年12月31日的日期和時間資料,精確度為3.33毫秒或0.00333秒,即可以表示的日期範圍從公元2023年1月1日00:00:00.000 到2023年12月31日23:59:59.997 ,精確到3.33毫秒。
microsoft sql server 用兩個 4 位元組的整數內部儲存 datetime 資料型別的值。第乙個 4 位元組儲存 base date (即 1900 年 1 月 1 日)之前或之後的天數。基礎日期是系統參考日期。不允許早於 1753 年 1 月 1 日的 datetime 值。第乙個4 位元組:1900 年1 月1 日當日為0 ;之前的日期是負數,之後日期是正數。另外乙個 4 位元組儲存以10/3 毫秒數所代表的每天的時間。
declare使用getdate()和getutcdate()為datetime型別的變數賦值,這兩個函式返回值的型別是datetime@dtdatetime
declare3,datetime2資料型別 儲存日期和時間,需要的儲存空間不固定。根據儲存的時間部分 fractional seconds precision來確定datetime2的storage size,6 bytes for precisions less than 3; 7 bytes for precisions 3 and 4. all other precisions require 8 bytes.@dtdatetime
set@dt
=getdate()
datetime2可以表示比datetime更精確的時間,預設的資料格式是yyyy-mm-dd hh:mm:ss.nnnnnnn,datetime2 秒預設的精度是7,即用7位小數表示一秒的精度。
datetime2的語法是
datetime2 [下面兩種宣告變數的方式是等價的。(fractional seconds precision)
]
declare為datetime2型別的變數賦值,需要使用sysdatetime()和sysutcdatetime(),這兩個函式返回值的型別是datetime2(7)。@dt2 datetime2(7)
declare
@dt2 datetime2
declare4,date資料型別只儲存日期,不儲存時間,需要3b的儲存空間,預設的資料格式是yyyy-mm-dd,支援的日期範圍從0001-01-01到9999-12-31@dt2 datetime2
set@dt2
=sysdatetime()
可以使用日期字串,getdate()函式和sysdatetime()函式為date型別的變數賦值
declare5,time資料型別 只儲存時間,不儲存日期,需要5b的儲存空間.@d date
set@d='
2015-07-02
'set@d=
getdate()
set@d
=sysdatetime()
time預設的fractional second precision是7,預設的資料格式是hh:mm:ss.nnnnnnn。
time資料型別的語法
time [推薦使用時間字串和sysdatetime()函式為time型別的變數賦值。不推薦使用getdate()函式,getdate()函式返回的是datetime型別,時間部分的fractional second precision沒有time型別高,如果對時間的precision要求高,請使用時間字串和sysdatetime()函式為time型別的變數賦值。(fractional second precision)
]
--6,a ****** exampledeclare @t time(7)
declare
@t time
set@t='
13:48:43.2840467
'set
@t=sysdatetime()
--not recommend
set@t
=getdate()
declare@dt2 datetime2
declare
@d date
declare
@t time
--getdate(),getutcdate() 返回值的資料型別是datetime
--sysdatetime(),sysutcdate() 返回值的資料型別是datetime2
select
@dt=
getdate(),
@dt2
=sysdatetime(),
@d=convert(nvarchar(8),getdate(),112),
@t='
13:48:43.2840467
'select
@dtas dt,@dt2
as dt2,@d
as d, @t
as t
7,檢視變數占用的位元組數
datalength能過返回任意資料型別的變數所占用的位元組數量,從下圖中,可以看到,datetime占用的儲存空間太大,精度不高,datetime2完勝datetime,在產品環境中,推薦使用datetime2
declare@dt1
datetime
declare
@dt2 datetime2(2)
declare
@dt3 datetime2(4)
set@dt1
=getdate()
set@dt2
=getdate()
set@dt3
=sysdatetime()
select
datalength(@dt1),datalength(@dt2),datalength(@dt3),@dt1,@dt2,@dt3
如果對time的要求不是很高,保留2位毫秒,使用datetime2(2),比其他型別節省儲存空間。
datalength (transact-sql)
作者:
悅光陰
分類:
sql server
SQL Server 日期和時間函式
1 常用日期方法 下面的getdate 2006 11 08 13 37 56.233 1 datename datepart date 返回表示指定日期的指定日期部分的字串。datepart詳見下面的列表.select datename day,getdate 返回8 2 datepart dat...
SQL Server 日期和時間函式
1 常用日期方法 下面的getdate 2006 11 08 13 37 56.233 1 datename datepart date 返回表示指定日期的指定日期部分的字串。datepart詳見下面的列表.select datename day,getdate 返回8 2 datepart dat...
SQL Server 日期和時間函式
1 常用日期方法 下面的getdate 2006 11 08 13 37 56.233 1 datename datepart date 返回表示指定日期的指定日期部分的字串。datepart詳見下面的列表.select datename day,getdate 返回8 2 datepart dat...