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

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

Tento článek obsahuje příklady převodu smalldatetime hodnotu na datum a čas 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.

datum a čas datový typ na druhé straně obsahuje 3-místnou část ve zlomcích sekund a jeho přesnost je zaokrouhlena na přírůstky 0,000, 003 nebo 007 sekund.

Když převedete smalldatetime hodnotu na datetime , smalldatetime hodnota se zkopíruje do datetime hodnota. Zlomkové sekundy jsou nastaveny na 0.

Ve většině případů by bylo lepší převést na datetime2 datový typ namísto datetime . Tím se zvýší přesnost při použití stejné velikosti úložiště. Pokud však opravdu potřebujete, aby byl datetime , zde je několik příkladů.

Příklad 1 – Implicitní konverze

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

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

Výsledek:

+---------------------+-------------------------+
| smalldatetime       | datetime                |
|---------------------+-------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 |
+---------------------+-------------------------+

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 datum a čas proměnná.

V tomto příkladu vidíme, že smalldatetime hodnota nezahrnuje zlomkové sekundy, sekundy byly nastaveny na nulu a minuta byla zaokrouhlena nahoru od skutečné hodnoty, kterou jsem se jí pokusil přiřadit.

Nicméně datum a čas hodnota obsahuje 3-místnou zlomkovou část, která je nastavena na nulu.

Příklad 2 – Změna zlomkové části

I když je zlomková část nastavena na nulu, jakmile hodnotu převedete na datetime , nyní můžete změnit zlomkovou část (a sekundovou část).

V tomto příkladu používám DATEADD() funkce pro úpravu zlomků sekund datetime hodnotu.

DECLARE 
  @thesmalldatetime smalldatetime,
  @thedatetime datetime;
SET @thesmalldatetime = '2025-05-21 10:15:30';
SET @thedatetime = @thesmalldatetime;
SELECT 
  @thesmalldatetime AS 'smalldatetime',
  @thedatetime AS 'datetime',
  DATEADD(millisecond, 123, @thedatetime) AS 'datetime Modified';

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

smalldatetime     | 2025-05-21 10:16:00
datetime          | 2025-05-21 10:16:00.000
datetime Modified | 2025-05-21 10:16:00.123

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 datum a čas .

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

Výsledek:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 |
+---------------------+-------------------------+

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(datetime, @thesmalldatetime) AS 'datetime';

Výsledek:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 |
+---------------------+-------------------------+

Jak již bylo zmíněno, zvažte převod na datetime2 datový typ namísto datetime . To poskytuje zvýšenou přesnost při použití stejné velikosti úložiště.


  1. Je lepší použít kurzorový adaptér nebo adaptér pole

  2. Nasazení LocalDB na klientském PC

  3. Získejte poslední ID vložky po připravené vložce s PDO

  4. MySQL:Zobrazit s poddotazem v omezení klauzule FROM