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

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

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

smalldatetime datový typ nemá žádné zlomkové sekundy a jeho složka sekund je vždy nastavena na nulu (:00). Jeho přesnost je zaokrouhlena na nejbližší minutu.

datetime2 datový typ na druhé straně umožňuje zadat přesnost ve zlomcích sekund od 0 do 7. Pokud toto nezadáte, použije se 7 (výchozí). Pokud zadáte nulu (0 ), jeho přesnost bude zaokrouhlena na nejbližší sekundu.

Když převedete smalldatetime hodnotu na datetime2 , hodiny a minuty se zkopírují. Sekundy a zlomky sekund jsou nastaveny na 0.

Příklad 1 – Implicitní konverze

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

DECLARE 
  @thesmalldatetime smalldatetime,
  @thedatetime2 datetime2;
SET @thesmalldatetime = '2025-05-21 10:15:30';
SET @thedatetime2 = @thesmalldatetime;
SELECT 
  @thesmalldatetime AS 'smalldatetime',
  @thedatetime2 AS 'datetime2';

Výsledek:

+---------------------+-----------------------------+
| smalldatetime       | datetime2                   |
|---------------------+-----------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00.0000000 |
+---------------------+-----------------------------+

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 smalldatetime hodnotu na datetime2 proměnná.

V tomto příkladu vidíme, že smalldatetime hodnota nezahrnuje zlomkové sekundy, sekundy byly nastaveny na nulu a minuty byly zaokrouhleny nahoru.

V tomto případě datetime2 hodnota používá přesnost 7. Důvodem je, že 7 je výchozí hodnota. Neuvedl jsem přesnost, a proto byla použita výchozí hodnota. Výsledkem je použití 7 nul ve zlomkové části.

Příklad 2 – Odstraňte zlomkovou část

V případě potřeby můžete zlomky sekund odstranit. Chcete-li to provést, jednoduše použijte datetime2(0) při deklaraci proměnné.

DECLARE 
  @thesmalldatetime smalldatetime,
  @thedatetime2 datetime2(0);
SET @thesmalldatetime = '2025-05-21 10:15:30';
SET @thedatetime2 = @thesmalldatetime;
SELECT 
  @thesmalldatetime AS 'smalldatetime',
  @thedatetime2 AS 'datetime2';

Výsledek:

+---------------------+---------------------+
| smalldatetime       | datetime2           |
|---------------------+---------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00 |
+---------------------+---------------------+

V tomto případě tedy oba datové typy vracejí stejnou hodnotu. Rozdíl je však v tom, že datetime2 má schopnost poskytovat přesnost na sekundu (ve srovnání s smalldatetime přesnost na minutu).

Příklad:

DECLARE 
  @thesmalldatetime smalldatetime,
  @thedatetime2 datetime2(0);
SET @thesmalldatetime = '2025-05-21 10:15:30';
SET @thedatetime2 = @thesmalldatetime;
SELECT 
  DATEADD(second, 30, @thesmalldatetime) AS 'smalldatetime',
  DATEADD(second, 30, @thedatetime2) AS 'datetime2';

Výsledek:

+---------------------+---------------------+
| smalldatetime       | datetime2           |
|---------------------+---------------------|
| 2025-05-21 10:17:00 | 2025-05-21 10:16:30 |
+---------------------+---------------------+

V tomto příkladu jsem použil DATEADD() funkce pro přidání 30 sekund ke každé hodnotě. Každý datový typ však vrací jiný výsledek. datetime2 datový typ respektuje sekundovou část a poskytuje správný výsledek se 100% přesností. smalldatetime typ se na druhou stranu zaokrouhluje nahoru na nejbližší minuty (zatímco sekundová část zůstává na nule).

Příklad 3 – Explicitní konverze 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 smalldatetime a datetime2 .

DECLARE @thesmalldatetime smalldatetime;
SET @thesmalldatetime = '2025-05-21 10:15:30';
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CAST(@thesmalldatetime AS datetime2(0)) AS 'datetime2(0)';

Výsledek:

+---------------------+---------------------+
| thesmalldatetime    | datetime2(0)        |
|---------------------+---------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00 |
+---------------------+---------------------+

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

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

DECLARE @thesmalldatetime smalldatetime;
SET @thesmalldatetime = '2025-05-21 10:15:30';
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CONVERT(datetime2(0), @thesmalldatetime) AS 'datetime2(0)';

Výsledek:

+---------------------+---------------------+
| thesmalldatetime    | datetime2(0)        |
|---------------------+---------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00 |
+---------------------+---------------------+

  1. Co je skalární UDF na serveru SQL?

  2. PostgreSQL privilegia a správa uživatelů – co byste měli vědět

  3. Zlepšuje cizí klíč výkon dotazů?

  4. Hibernate, Postgresql:Sloupec x je typu oid, ale výraz je typu byte