sql >> Databáze >  >> RDS >> Sqlserver

Přidání posunu časového pásma k hodnotě datetime2 v SQL Server (T-SQL)

V SQL Server, TODATETIMEOFFSET() funkce byla speciálně navržena tak, aby vracela datetimeoffset hodnotu z datetime2 hodnota.

Vzhledem k tomu, že datetime2 datový typ ve skutečnosti nepodporuje posuny časových pásem a datetimeoffset musí obsahovat posun, TODATETIMEOFFSET() funkce vám umožňuje určit posun časového pásma, který se má použít.

Tento článek poskytuje několik příkladů k demonstraci.

Základní použití

Zde je příklad typického použití TODATETIMEOFFSET() funkce.

DECLARE @dt datetime2 = '2020-12-20 17:33:59.8900000';
SELECT
  @dt AS [datetime2],
  TODATETIMEOFFSET(@dt, '+07:00') AS [datetimeoffset];

Výsledek (při použití vertikálního výstupu):

datetime2      | 2020-12-20 17:33:59.8900000
datetimeoffset | 2020-12-20 17:33:59.8900000 +07:00

V tomto případě vrátím původní datetime2 hodnotu a výsledný datetimeoffset hodnota.

Výsledkem je, že původní datum/čas je stejný, až na to, že byl přidán posun zadaného časového pásma.

Rozsah je +14 až -14 (v hodinách). Výraz je interpretován v místním čase pro zadané časové pásmo.

Zadejte posun časového pásma v minutách

Alternativně můžete zadat posun časového pásma v minutách. Zde je příklad.

DECLARE @dt datetime2 = '2020-12-20 17:33:59.8900000';
SELECT
  @dt AS [datetime2],
  TODATETIMEOFFSET(@dt, +120) AS [datetimeoffset];

Výsledek (při použití vertikálního výstupu):

datetime2      | 2020-12-20 17:33:59.8900000
datetimeoffset | 2020-12-20 17:33:59.8900000 +02:00

V tomto případě jsem uvedl +120 minut, což je stejné jako dvě hodiny. Takže výsledkem byl posun časového pásma +02:00 (to znamená plus dvě hodiny).

Všimněte si také, že když zadáte posun časového pásma v minutách, zadáte jej jako celočíselnou hodnotu. Na druhou stranu, když jej zadáte v hodinách, musíte jej zadat jako řetězec.

Příklady, jak to provést, naleznete v části Převod data na jiné časové pásmo.


  1. Implementace automatického zálohování a obnovy databáze pomocí výchozích prostředků

  2. Odstranění událostí z protokolu pošty databáze SQL Server (T-SQL)

  3. execSQL:je bindargs lepší?

  4. Jak mohu vybrat mezi 1. dnem aktuálního měsíce a aktuálním dnem v MySQL?