SQL Server的日期和時間型別

2021-09-22 07:31:43 字數 3501 閱讀 6706

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

@dtdatetime

使用getdate()和getutcdate()為datetime型別的變數賦值,這兩個函式返回值的型別是datetime

declare

@dtdatetime

set@dt

=getdate()

3,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.

datetime2可以表示比datetime更精確的時間,預設的資料格式是yyyy-mm-dd hh:mm:ss.nnnnnnn,datetime2 秒預設的精度是7,即用7位小數表示一秒的精度。

datetime2的語法是

datetime2 [

(fractional seconds precision)

]

下面兩種宣告變數的方式是等價的。

declare

@dt2 datetime2(7)

declare

@dt2 datetime2

為datetime2型別的變數賦值,需要使用sysdatetime()和sysutcdatetime(),這兩個函式返回值的型別是datetime2(7)。

declare

@dt2 datetime2

set@dt2

=sysdatetime()

4,date資料型別只儲存日期,不儲存時間,需要3b的儲存空間,預設的資料格式是yyyy-mm-dd,支援的日期範圍從0001-01-01到9999-12-31

可以使用日期字串,getdate()函式和sysdatetime()函式為date型別的變數賦值

declare

@d date

set@d='

2015-07-02

'set@d=

getdate()

set@d

=sysdatetime()

5,time資料型別 只儲存時間,不儲存日期,需要5b的儲存空間.

time預設的fractional second precision是7,預設的資料格式是hh:mm:ss.nnnnnnn。

time資料型別的語法

time [

(fractional second precision)

]

推薦使用時間字串和sysdatetime()函式為time型別的變數賦值。不推薦使用getdate()函式,getdate()函式返回的是datetime型別,時間部分的fractional second precision沒有time型別高,如果對時間的precision要求高,請使用時間字串和sysdatetime()函式為time型別的變數賦值。

--

declare @t time(7)

declare

@t time

set@t='

13:48:43.2840467

'set

@t=sysdatetime()

--not recommend

set@t

=getdate()

6,a ****** example

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...