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

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

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

Jedna z výhod převodu data a času hodnotu na smalldatetime spočívá v tom, že snížíte velikost úložiště z 8 bajtů na 4 bajty. Tím však ztrácíte přesnost.

datum a čas datový typ obsahuje 3místnou část ve zlomcích sekund. Jeho přesnost je zaokrouhlena na 0,000, 003 nebo 007 sekund.

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

Když převedete datum a čas hodnotu na smalldatetime , zkopíruje se datum a část času. Sekundová složka se nastaví na nulu (bez ohledu na původní hodnotu) a čas se zaokrouhlí na nejbližší minuty. Všechny zlomky sekund jsou odstraněny.

Příklad 1 – Implicitní konverze

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

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

Výsledek:

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

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

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

Příklad 2 – 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 datetime a smalldatetime .

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

Výsledek:

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

Možná jste si všimli, že v tomto příkladu jsem změnil zlomkové sekundy při přiřazování počáteční hodnoty @thedatetime . Ale protože to přiřazuji k datu a času datový typ, část ve zlomcích sekund se zaokrouhlí nahoru (protože její přesnost je zaokrouhlena na přírůstky 0,000, 003 nebo 0,007 sekund). V tomto případě se snažím přiřadit zlomkové sekundy 125 ale zaokrouhlí se nahoru na 127 .

Toto však nemá vliv na smalldatetime hodnotu.

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

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

DECLARE @thedatetime datetime;
SET @thedatetime = '2025-05-21 10:15:30.125';
SELECT 
  @thedatetime AS 'datetime',
  CONVERT(smalldatetime, @thedatetime) AS 'smalldatetime';

Výsledek:

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

  1. SET DATEFIRST – Nastavte první den v týdnu na SQL Serveru

  2. Funkce ROWIDTONCHAR() v Oracle

  3. Jak najít nejpomalejší dotazy

  4. Funkce FLOOR() v Oracle