进行考虑时区的Where子句

时间:2019-10-15 18:27:02

标签: sql sql-server

我正在使用SQL Server。 假设我有几条记录和一列datetimeoffset。

record #1 has a datetime with a +03:00 TZ
record #2 has a datetime with a +06:00 TZ
record #3 has a datetime with a -02:00 TZ

我想显示所有时间已过去的记录,以提供该特定记录的TZ。 我的WHERE子句是什么样的?

1 个答案:

答案 0 :(得分:3)

这个评论太长了,但是,SQL Server 已经 可以优雅地处理时区:

<a href="/instagram.fist4-1.fna.fbcdn.net/vp/a122a6b090b0d08fb29054a58e4ba1d8/5E6244BC/t51.2885-15/e35/73020566_1906916579453459_3610340591421234923_n.jpg?_nc_ht=instagram.fist4-1.fna.fbcdn.net&amp;_nc_cat=1&amp;se=7&amp;ig_cache_key=MjE1Mzk3NTkyNTE1NTgyMjI1NA%3D%3D.2" download>
            download
</a>

如果您还输入了日期和时间中的时区,则SQL Server将适当地比较这些值。

如果由于某种原因要基于相对于该位置的时间或日期进行“填充”,则应添加一个计算列,该列强制转换为USE Sandbox; GO CREATE TABLE TestTable (OffsetTime datetimeoffset(0)); GO --Insert 5 times that are all the same time: INSERT INTO TestTable VALUES ('2019-10-15T17:00:00-02:00'), ('2019-10-15T18:00:00-01:00'), ('2019-10-15T19:00:00+00:00'), ('2019-10-15T20:00:00+01:00'), ('2019-10-15T21:00:00+02:00'); GO --All rows SELECT * FROM TestTable; --All rows SELECT * FROM TestTable WHERE OffsetTime = '2019-10-15T19:00:00+00:00'; --All rows SELECT * FROM TestTable WHERE OffsetTime = '2019-10-15T21:00:00+02:00'; datetime2和{ {1}}(取决于您的需求):

date