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

Převést „datetime2“ na „čas“ v SQL Server (příklady T-SQL)

Tento článek obsahuje příklady převodu datetime2 hodnotu k času hodnotu v SQL Server.

Jedna z výhod převodu datetime2 hodnotu k času spočívá v tom, že zmenšíte velikost úložiště z 6 až 8 bajtů až na 3 až 5 bajtů (v závislosti na přesnosti, kterou mu každý datový typ přiřadil). Přesně řečeno, 1 bajt navíc se používá k uložení přesnosti pro tyto typy dat, takže byste k těmto částkám měli přidat 1 bajt.

Je zřejmé, že během převodu ztratíte část s datem, ale tuto převodu byste neprováděli, pokud byste potřebovali část s datem zachovat.

Když převedete datetime2 hodnotu k času , zkopíruje se pouze časová část hodnoty. Přesný výsledek bude záviset na přesnosti ve zlomcích sekund, které jsou přiřazeny každému typu. Když je čas přesnost je menší než datetime2 přesnost, zlomky sekund se zaokrouhlí nahoru, aby odpovídaly času přesnost.

Pokud jde o přesnost, oba datové typy vám umožňují určit měřítko od 0 desetinných míst do 7. Máte tedy možnost provést převod bez ztráty zlomků sekund nebo bez zaokrouhlení výsledku.

Příklad 1 – Implicitní konverze

Zde je příklad implicitní konverze mezi datetime2 a čas .

DECLARE @thedatetime2 datetime2, @thetime time;SET @thedatetime2 ='2025-05-21 10:15:30.1234567';SET @thetime =@thedatetime2;SELECT @thedatetime2 AS 'datetime2', @thetime AS 'time';

Výsledek:

+-----------------------------+---------------- --+| datum a čas2 | čas ||-----------------------------+----------------- -|| 2025-05-21 10:15:30.1234567 | 10:15:30.1234567 |+-----------------------------+------------- -----+

Jedná se o implicitní převod, protože k jeho explicitnímu převodu nepoužíváme konverzní funkci (jako jsou ty níže). V tomto případě SQL Server provede implicitní převod za scénou, když se pokusíme přiřadit datetime2 hodnotu k času proměnná.

Na tomto výsledku je nejviditelnější, že čas hodnota nezahrnuje datum. To se dá očekávat, protože čas datový typ je určen pouze pro ukládání časových hodnot, nikoli datových hodnot.

Také v tomto příkladu oba datové typy používají svou výchozí přesnost (což je měřítko 7). To znamená, že čas hodnota skončí se stejnou přesností jako datetime2 hodnota. Důvod, proč vím, že používají svou výchozí přesnost, je ten, že jsem při jejich deklaraci nespecifikoval stupnici zlomků sekund.

Příklad 2 – Převod na vyšší přesnost

V tomto příkladu čas proměnná používá vyšší přesnost na datetime2 variabilní.

DECLARE @thedatetime2 datetime2(4), @thetime time(7);SET @thedatetime2 ='2025-05-21 10:15:30.1234567';SET @thetime =@thedatetime2;SELECT @thedatetime2 AS 'datetime2', @thetime JAKO 'čas';

Výsledek:

+--------------------------+------------------+ | datum a čas2 | čas ||--------------------------+------------------|| 2025-05-21 10:15:30.1235 | 10:15:30.1235000 |+--------------------------+---------------- --+

V tomto případě datetime2 proměnná používá stupnici 4 a čas proměnná používá 7.

Výsledkem je datetime2 zaokrouhlíme zlomkové sekundy nahoru, takže dostaneme 1235 místo 1234 . Znamená to také, že když jej převedeme na čas , hodnota končí 3 koncovými nulami (protože jsme zadali měřítko 7). To také znamená, že čas velikost úložiště hodnoty je 5 bajtů (6 včetně přesnosti) ve srovnání se 4 bajty (5 včetně přesnosti), pokud bychom jí dali stupnici 4.

Příklad 3 – Převod na nižší přesnost

V tomto příkladu čas proměnná používá nižší přesnost na datetime2 variabilní.

DECLARE @thedatetime2 datetime2(7), @thetime time(0);SET @thedatetime2 ='2025-05-21 10:15:30.5678912';SET @thetime =@thedatetime2;SELECT @thedatetime2 AS 'datetime2', @thetime JAKO 'čas';

Výsledek:

+-----------------------------+----------+| datum a čas2 | čas ||-----------------------------+----------|| 2025-05-21 10:15:30.5678912 | 10:15:31 |+-----------------------------+----------+ 

Takže v tomto případě čas Stupnice je snížena na 0, což znamená, že do výsledku nejsou zahrnuty žádné zlomky sekund. Sekundy se také odpovídajícím způsobem zaokrouhlí nahoru.

Čas hodnota využívá 4 bajty úložiště (včetně přesnosti), ve srovnání s 9 bajty pro datetime2 hodnotu (a ve srovnání s 6 bajty za čas hodnota v předchozím příkladu).

Příklad 4 – Explicitní převod pomocí CAST()

Zde je příklad explicitní konverze. V tomto případě používám CAST() funkce přímo v SELECT k explicitnímu převodu mezi datetime2 a čas .

DECLARE @thedatetime2 datetime2(3);SET @thedatetime2 ='2025-05-21 10:15:30.123';SELECT @thedatetime2 AS 'datetime2', CAST(@thedatetime2 AS time(0)) AS 'time( 0)';

Výsledek:

+-------------------------+-----------+| datum a čas2 | čas(0) ||-------------------------+-----------|| 2025-05-21 10:15:30.123 | 10:15:30 |+-------------------------+-----------+

Příklad 5 – Explicitní převod pomocí CONVERT()

Zde je příklad explicitní konverze pomocí CONVERT() funkce namísto CAST() .

DECLARE @thedatetime2 datetime2(3);SET @thedatetime2 ='2025-05-21 10:15:30.123';SELECT @thedatetime2 AS 'datetime2', CONVERT(time(0), @thedatetime2) AS 'time( 0)';

Výsledek:

+-------------------------+-----------+| datum a čas2 | čas(0) ||-------------------------+-----------|| 2025-05-21 10:15:30.123 | 10:15:30 |+-------------------------+-----------+

  1. Jedinečná modelová pole v Django nerozlišují malá a velká písmena?

  2. Nastavení Django a PostgreSQL na dvou různých instancích EC2

  3. Získejte poslední vložené ID pomocí Mysql

  4. SQL se připojí