首页 > 解决方案 > 如何在 SQL Server 中插入带偏移量的日期时间?

问题描述

我有以下价值

2020-06-16T13:41:36.000Z

如何将值插入表中,我应该使用什么列数据类型?

我已经尝试使用datetime列的数据类型,但没有成功

标签: sqlsql-server

解决方案


正确的数据类型是datetimeoffset-- 虽然datetime并且datetime2也可以工作(假设这些值都在同一个时区)。SQL Server 使用内部格式存储日期/时间。

create table t (ts datetimeoffset);

insert into t (ts) values ('2020-06-16T13:41:36.000Z');

select * from t;

这将返回:

ts
2020-06-16 13:41:36.0000000

这等效于您的值,但使用任意格式进行格式化。如果要控制格式,则需要将值转换为字符串。一种方法convert()与选项 127 一起使用:

select convert(varchar(255), t.ts, 127) from t

format()提供更大的灵活性。

您还可以将此逻辑添加到表定义中:

alter table t add ts_iso8601 as (convert(varchar(255), t.ts, 127));

是一个 db<>fiddle。


推荐阅读