背景:
项目数据库需要用到 date 字段,看了下官方文档后,简单操作了一下供大家参考。
日期和时间
数据格式
在Microsoft SQL Server的类型系统中,使用 date 表示日期类型,使用time表示时间类型,使用DateTime和DateTime2表示日期和时间的组合,DateTime2是DateTime的升级版本。
这些数据类型占用的存储空间各不相同;当存储大量数据时,合理的选择小数秒的精度,能够节省数据的占用空间。
具体的数据格式如下图:
获取当前系统日期和时间
SELECT 'SYSDATETIME() ', SYSDATETIME();
SELECT 'SYSDATETIMEOFFSET()', SYSDATETIMEOFFSET();
SELECT 'SYSUTCDATETIME() ', SYSUTCDATETIME();
SELECT 'CURRENT_TIMESTAMP ', CURRENT_TIMESTAMP;
SELECT 'GETDATE() ', GETDATE();
SELECT 'GETUTCDATE() ', GETUTCDATE();
/* Returned:
SYSDATETIME() 2007-05-03 18:34:11.9351421
SYSDATETIMEOFFSET() 2007-05-03 18:34:11.9351421 -07:00
SYSUTCDATETIME() 2007-05-04 01:34:11.9351421
CURRENT_TIMESTAMP 2007-05-03 18:34:11.933
GETDATE() 2007-05-03 18:34:11.933
GETUTCDATE() 2007-05-04 01:34:11.933
*/
实际使用
创建表时,采用以下语句,可根据自己要的数据类型来创建
例如我选择的 datetime
CREATE TABLE DateTest(
DateTestId int PRIMARY KEY IDENTITY,
DateTestCreateTime datetime ,
DateTestUpdateTime datetime ,
);
我们插入一条语句:
INSERT INTO DateTest values(GETUTCDATE(),GETDATE());
查看一下结果:
诶 跟我的本地PC的时间不一样啊 什么鬼……
查阅发现:
因为咱的sql server2008连接的是局域网上的数据库,故通过getdate()得到的自然会是所连接的服务器上的系统时间,而不是本地PC的系统时间。
那怎么更改成本地的时间呢???
使用 SWITCHOFFSET
切换时区:
SWITCHOFFSET ( DATETIMEOFFSET, time_zone )
DATETIMEOFFSET
:是一个可以解析为 datetimeoffset(n) 值的表达式。
time_zone
:是一个格式为 [+|-]TZH:TZM 的字符串,或是一个表示时区偏移量的带符号的整数(分钟数),假定它能够感知夏时制并作出相应的调整。
把本地时间的时区零时区(伦敦)切换到东八区(北京):
DECLARE @remote DATETIMEOFFSET
DECLARE @local DATETIMEOFFSET
SET @remote = SYSDATETIMEOFFSET()
SET @local = SWITCHOFFSET (@remote, '+08:00')
SELECT @remote AS remote_time,@local AS local_t
结果如图
本地PC时间
时间更改成功!!!
当然了之后插入数据库时语句可以简单一些
INSERT INTO DateTest values(SWITCHOFFSET (SYSDATETIMEOFFSET(),'+08:00'));