Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Преобразувайте „datetime“ в „smalldatetime“ в SQL Server (T-SQL примери)

Тази статия съдържа примери за преобразуване на дата и час стойност до smalldatetime стойност в SQL Server.

Едно от предимствата на преобразуването на дата и час стойност на smalldatetime е, че намалявате размера на съхранение от 8 байта на 4 байта. Въпреки това губите прецизност за това.

Дата и час типът данни включва 3-цифрена част от секундите. Неговата точност се закръглява до стъпки от .000, .003 или .007 секунди.

Smalldatetime тип данни от друга страна, няма частни секунди и неговият компонент за секунди винаги е настроен на нула (:00). Освен това има точност само до най-близката минута.

Когато конвертирате дата и час стойност на smalldatetime , датата и частта от часа се копират. Компонентът за секунди е настроен на нула (независимо от първоначалната стойност) и времето се закръглява до най-близката минута. Всички части от секундите се премахват.

Пример 1 – Неявно преобразуване

Ето пример за имплицитно преобразуване между дата и час и 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';

Резултат:

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

Това е имплицитно преобразуване, защото не използваме функция за преобразуване (като тези по-долу), за да я преобразуваме изрично. В този случай SQL Server извършва имплицитно преобразуване зад кулисите, когато се опитваме да присвоим datetime стойност до smalldatetime променлива.

В този пример можем да видим, че smalldatetime стойността не включва дробните секунди, секундите са зададени на нула, а минутата е закръглена нагоре.

Пример 2 – Изрично преобразуване с помощта на CAST()

Ето пример за изрично преобразуване. В този случай използвам CAST() функция директно в SELECT изявление за изрично преобразуване между datetime и smalldatetime .

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

Резултат:

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

Може би сте забелязали, че в този пример промених частичните секунди, когато присвоих началната стойност на @thedatetime . Но защото го присвоявам на дата и час тип данни, частта от секундите се закръглява нагоре (тъй като нейната точност е закръглена до стъпки от .000, .003 или .007 секунди). В този случай се опитвам да задам част от секунди от 125 но се закръглява до 127 .

Това обаче не засяга smalldatetime стойност.

Пример 3 – Изрично преобразуване с помощта на CONVERT()

Ето пример за изрично преобразуване с помощта на CONVERT() функция вместо CAST() .

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

Резултат:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да конвертирате низ в шестнадесетичен и обратно?

  2. Какво е SQL Server? (Определение, версии, издания)

  3. Използване на индекси в оптимизирани за паметта таблици на SQL Server

  4. Представяне на общи изрази за таблици в SQL Server

  5. Трябва ли MAMP да върне ::1 като IP на localhost?