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
廣告