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