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

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

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

Едно от предимствата на преобразуването на дата и час стойност до време е, че намалявате размера на съхранение от 8 байта до 3, 4 или 5 байта (в зависимост от прецизността, която използвате за време стойност). Строго погледнаве използва 4, 5 или 6 байта, тъй като се използва допълнителен байт за съхраняване на неговата точност.

Когато конвертирате дата и час стойност до време , копира се само частта от време на стойността. Точният резултат ще зависи от точността на частични секунди, която задавате на време . Когато настъпиве прецизността е по-малка от datetime прецизност, дробните секунди се закръгляват нагоре, за да отговарят на времета прецизност.

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

Времетота типът данни, от друга страна, ви позволява да зададете частична точност от секунди от 0 до 7. Това се постига с помощта на time(n ) синтаксис, където n е скалата от 0 до 7. Ако не посочите това, той ще използва 7, което осигурява точност от 100 наносекунди.

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

Ето пример за имплицитно преобразуване между дата и час ивреме .

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

Резултат:

+-------------------------+------------------+
| datetime                | time             |
|-------------------------+------------------|
| 2025-05-21 10:15:30.123 | 10:15:30.1233333 |
+-------------------------+------------------+

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

Най-очевидното нещо в този резултат е, че ввремета стойността не включва датата. Това е очаквано, тъй като врема типът данни е единствено за съхранение на стойности за време, а не стойности за дата.

Можем също да видим, че евремета променливата има по-голяма точност на дробни секунди и в крайна сметка получаваме дробна част от 1233333 (срещу 123 за дата и час стойност). Това се случва, защото навремета стойността използва мащаба по подразбиране от 7 (защото не сме посочили изрично мащаб).

Пример 2 – Закръгляване

Дата и час типът данни се закръглява до стъпки от .000, .003 или .007 секунди. Дори ако изрично го зададете на друга стойност, тя ще бъде закръглена.

Ето един пример:

DECLARE 
  @thedatetime datetime, 
  @thetime time;
SET @thedatetime = '2025-05-21 10:15:30.125';
SET @thetime = @thedatetime;
SELECT 
  @thedatetime AS 'datetime',
  @thetime AS 'thetime';

Резултат:

+-------------------------+------------------+
| datetime                | thetime          |
|-------------------------+------------------|
| 2025-05-21 10:15:30.127 | 10:15:30.1266667 |
+-------------------------+------------------+

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

Времетота стойност обаче, задайте частичните секунди на 1266667 .

Ако просто зададем първоначалната стойност на време на първо място, неговата дробна част би върнала 1250000 .

Пример 3 – Прецизност/точност

Както бе споменато, вресто типът данни ви позволява да зададете точността на дробни секунди. Ако не направите това, той използва 7 (следователно предишният пример използва 7).

Можете да промените това, като използвате time(n ) синтаксис. Следователно можех да използвам време(7) за предишните примери, за да получите същия резултат.

В този пример премахвам частичните секунди изцяло, като използвам time(0) :

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

Резултат:

+-------------------------+----------+
| datetime                | time     |
|-------------------------+----------|
| 2025-05-21 10:15:30.127 | 10:15:30 |
+-------------------------+----------+

Когато правим това, размерът за съхранение на времета стойността е намалена до 3 байта (4 байта включително прецизност) за разлика от 8 байта за datetime стойност.

Имайте предвид, че използването на по-ниска точност от първоначалната стойност ще доведе до закръгляне на резултата, за да отговаря на посочената точност.

Пример:

DECLARE 
  @thedatetime datetime, 
  @thetime time(0);
SET @thedatetime = '2025-05-21 10:15:30.525';
SET @thetime = @thedatetime;
SELECT 
  @thedatetime AS 'datetime',
  @thetime AS 'time';

Резултат:

+-------------------------+----------+
| datetime                | time     |
|-------------------------+----------|
| 2025-05-21 10:15:30.527 | 10:15:31 |
+-------------------------+----------+

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

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

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

Резултат:

+-------------------------+-----------+
| datetime                | time(0)   |
|-------------------------+-----------|
| 2025-05-21 10:15:30.127 | 10:15:30  |
+-------------------------+-----------+

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

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

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

Резултат:

+-------------------------+-----------+
| datetime                | time(0)   |
|-------------------------+-----------|
| 2025-05-21 10:15:30.127 | 10:15:30  |
+-------------------------+-----------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка на SQL Server 7222:„В този екземпляр е разрешен само доставчик на SQL Server“

  2. Защо заявката за Microsoft SQL Server 2012 отнема минути в сравнение с JDBC 4.0, но секунди в Management Studio?

  3. Първа публична визуализация на SQL Server 2019:CTP 2.0

  4. DAY() Примери в SQL Server (T-SQL)

  5. Как променяте типа данни на колона в SQL Server?