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

Примери за преобразуване на „време“ в „дата и час“ в SQL Server (T-SQL)

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

Когато преобразувате време стойност до дата и час , към стойността се добавя допълнителна информация. Това е така, защото datetime типът данни съдържа както информация за дата, така и за час. Времетота типът данни, от друга страна, съдържа само информация за времето. Следователно информацията за дата се добавя към стойността, когато извършвате такова преобразуване. По-конкретно, датата е зададена на „1900-01-01“.

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

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

ДЕКЛАРИРАНЕ @thetime timeSET @thetime ='23:15:59.004007'ИЗБЕРЕТЕ @thetime КАТО 'време', CAST(@thetime КАТО datetime) КАТО 'datetime';

Резултат:

+------------------+-----------------------+| време | дата и час ||------------------+----------------------------------|| 23:15:59.0040070 | 1900-01-01 23:15:59.003 |+------------------+------------------ ------+

Когато конвертирате от време до дата и час , компонентът за дата е настроен на 1900-01-01 .

Също така имайте предвид, че самата стойност на времето се представя по различен начин и в двата типа данни. Времетота типът данни добавя нула към края (защото има по-висока прецизност – скалата му по подразбиране е 7). От друга страна, datetime стойностите използват по-ниска скала и се закръгляват до стъпки от .000, .003 или .007 секунди. Ако смятате, че това е проблематично, помислете за конвертиране в datetime2 вместо.

Пример 2 – По-ниска точност/мащаб

В предишния пример, времето стойността имаше по-висока прецизност в частни секунди от datetime стойност. Това е така, защото използва скала по подразбиране от 7. Но можем да променим това на по-ниска стойност, ако е необходимо.

Само за да е ясно, мащаб е броят на цифрите вдясно от десетичната запетая в число. Прецизност е общият брой цифри в числото. Можем да посочим мащаба, като добавим число в скоби към типа данни.

Ето какво се случва, ако изрично задам часа стойност да има по-ниска мащаб от дата и час стойност.

ДЕКЛАРИРАЙТЕ @thetime time(0)SET @thetime ='23:15:59.004007'ИЗБЕРЕТЕ @thetime КАТО 'време', CAST(@thetime КАТО datetime) КАТО 'datetime';

Резултат:

+---------+------------------------------+| време | дата и час ||----------+------------------------------|| 23:15:59 | 1900-01-01 23:15:59 000 |+----------+-------------------------+ 

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

Това е същото като първия пример, с изключение на това, че този път използвам CONVERT() функция вместо CAST() .

DECLARE @thetime timeSET @thetime ='23:15:59.004007'ИЗБЕРЕТЕ @thetime КАТО 'време', CONVERT(datetime, @thetime) КАТО 'datetime';

Резултат:

+------------------+-----------------------+| време | дата и час ||------------------+----------------------------------|| 23:15:59.0040070 | 1900-01-01 23:15:59.003 |+------------------+------------------ ------+

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

Ето пример за правене на същото нещо, но с помощта на имплицитно преобразуване на тип.

DECLARE @thetime time, @thedatetime datetimeSET @thetime ='23:15:59.004007'SET @thedatetime =@thetimeSELECT @thetime КАТО 'време', @thedatetime КАТО 'datetime';

Резултат:

+------------------+-----------------------+| време | дата и час ||------------------+----------------------------------|| 23:15:59.0040070 | 1900-01-01 23:15:59.003 |+------------------+------------------ ------+

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

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

Пример 5 – Промяна на датата

Ако трябва да промените датата (но запазите същото време), можете да използвате DATEADD() функция.

DECLARE @thetime time, @thedatetime datetimeSET @thetime ='23:15:59.004007'SET @thedatetime =@thetimeSET @thedatetime =DATEADD(година, 120, @thedatetime)ИЗБЕРЕТЕ @thetime КАТО 'време', @thedatetime AS 'datetime';

Резултат:

+------------------+-----------------------+| време | дата и час ||------------------+----------------------------------|| 23:15:59.0040070 | 2020-01-01 23:15:59.003 |+------------------+------------------- ------+

В този случай добавям 120 към стойността на годината, което я довежда до 2020 г.


  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 (T-SQL)

  2. Не може да се зареди DLL 'SqlServerSpatial.dll'

  3. Проверете състоянието на пощенските опашки на базата данни в SQL Server (T-SQL)

  4. SQL Server BULK INSERT от Linux

  5. Да се ​​параметризира ли името на таблицата в .NET/SQL?