SQL - SWITCHOFFSET() 函数



SQL 的SWITCHOFFSET()函数可用于返回已从存储时区偏移量更改为给定新时区偏移量的datetimeoffset值。

与DATETIMEOFFSET相比,SWITCHOFFSET的功能有所不同。它根据两个输入(DATETIMEOFFSET值和目标时区偏移量)将源值的偏移量转换为目标值。UTC值对于输入和输出都是相同的;您只需要将输入值的偏移量从最初记录它们的源偏移量切换到所需的目标偏移量。

语法

以下是SQL SWITCHOFFSET()函数的语法:

SWITCHOFFSET( expression, time_zone )

参数

此函数接受两个参数,如下所述:

  • expression − 将解析为datetimeoffset值的表达式

  • time_zone − 时区偏移量或带符号整数。

示例

在以下示例中,我们尝试演示SWITCHOFFSET()函数:

SELECT SWITCHOFFSET( '2023-02-20', '+06:00' ) AS Result;

输出

执行上述查询时,将获得如下输出:

+------------------------------------+
| Result                             |
+------------------------------------+
| 2023-02-20 06:00:00.0000000 +06:00 |
+------------------------------------+

示例

这里,我们将使用SWITCHOFFSET()函数的负值:

SELECT SWITCHOFFSET( '2023-02-20', '-06:00' ) AS Result;

输出

查询执行后,将生成如下所示的输出:

+------------------------------------+
| Result                             |
+------------------------------------+
| 2023-02-19 18:00:00.0000000 -06:00 |
+------------------------------------+

示例

在以下示例中,我们将设置一个变量,使用DATETIMEOFFSET()为其分配日期,将SWITCHOFFSET()应用于该日期,并使用以下查询将其与原始日期进行比较:

DECLARE @DATE datetimeoffset = '2023-02-19 18:00:00.0000000 -06:00';
SELECT @DATE AS 'Original Date',
   SWITCHOFFSET( @DATE, '+05:30' ) AS '+05:30';

输出

执行上述查询后,将显示如下输出:

+------------------------------------+------------------------------------+
| Original Date                      | +05:30                             |
+------------------------------------+------------------------------------+
| 2023-02-19 18:00:00.0000000 -06:00 | 2023-02-20 05:30:00.0000000 +05:30 |
+------------------------------------+------------------------------------+

示例

这里,我们使用的是DATETIMEOFFSET()

DECLARE
   @DATE AS DATETIMEOFFSET = '2023-02-20 04:10:00.0000000 +04:10',
   @TIMEZONE AS CHAR(6)= '-08:00'; 
SELECT SWITCHOFFSET(@DATE, @TIMEZONE) AS Result;

输出

查询执行后,将生成如下所示的输出:

+------------------------------------+
| Result                             |
+------------------------------------+
| 2023-02-19 16:00:00.0000000 -08:00 |
+------------------------------------+

示例

在以下查询中,我们将使用SYSDATETIMEOFFSET()函数生成当前日期/时间和偏移量:

SELECT SYSDATETIMEOFFSET() AS 'Current Date',
   SWITCHOFFSET( SYSDATETIMEOFFSET(), '+07:30' ) AS '+07:30';

输出

上述查询的输出如下所示:

+------------------------------------+------------------------------------+
| Current  Date                      | +07:30                             |
+------------------------------------+------------------------------------+
| 2023-02-20 16:03:59.8684429 +05:30 | 2023-02-20 18:03:59.8684429 +07:30 |
+------------------------------------+------------------------------------+

示例

考虑另一个示例,我们使用SYSDATETIMEOFFSET()函数生成运行SQL Server的系统的当前日期和时间。这里我们将添加负值:

SELECT SYSDATETIMEOFFSET() AS 'Current Date',
   SWITCHOFFSET( SYSDATETIMEOFFSET(), '-05:30' ) AS '-05:30';

输出

查询执行后,将生成如下所示的输出:

+------------------------------------+------------------------------------+
| Current  Date                      | -05:30                             |
+------------------------------------+------------------------------------+
| 2023-02-20 16:09:15.0193356 +05:30 | 2023-02-20 05:09:15.0193356 -05:30 |
+------------------------------------+------------------------------------+

示例

在以下示例中,我们将使用整数表示时区偏移量而不是字符串,并检查查询是否可以这样做:

SELECT SWITCHOFFSET( '2023-02-20', 250 ) AS Result;

输出

运行上述查询后,将生成如下所示的输出:

+------------------------------------+
| Result                             |
+------------------------------------+
| 2023-02-20 04:10:00.0000000 +04:10 |
+------------------------------------+
sql-date-functions.htm
广告