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

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

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

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

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

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

DECLARE @thedate date, @thedatetime datetime
SET @thedate = '2020-12-01'
SET @thedatetime = @thedate
SELECT 
  @thedate AS 'date',
  @thedatetime AS 'datetime';

Резултат:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.000 |
+------------+-------------------------+

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

Виждаме, че датата променливата съдържа само информация за дата, докато datetime променливата съдържа информация за дата и час.

Когато конвертирате между дата и дата и час , времевият компонент е настроен на 00:00:00.000 . Това е така, защото стойността на датата не съдържа никаква информация за времето, така че няма начин SQL Server да знае колко часа искате (ако има такъв).

Пример 2 – Промяна на времето

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

DECLARE @thedate date, @thedatetime datetime
SET @thedate = '2020-12-01'
SET @thedatetime = @thedate
SET @thedatetime = DATEADD(hour, 8, @thedatetime)
SELECT 
  @thedate AS 'date',
  @thedatetime AS 'datetime';

Резултат:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.000 |
+------------+-------------------------+

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

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

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  CAST(@thedate AS datetime) AS 'datetime';

Резултат:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.000 |
+------------+-------------------------+

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

Можем също така да коригираме времето по следния начин:

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  DATEADD(hour, 8, CAST(@thedate AS datetime)) AS 'datetime';

Резултат:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.000 |
+------------+-------------------------+

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

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

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  CONVERT(datetime, @thedate) AS 'datetime';

Резултат:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 00:00:00.000 |
+------------+-------------------------+

И коригиране на часа:

DECLARE @thedate date
SET @thedate = '2020-12-01'
SELECT 
  @thedate AS 'date',
  DATEADD(hour, 8, CONVERT(datetime, @thedate)) AS 'datetime';

Резултат:

+------------+-------------------------+
| date       | datetime                |
|------------+-------------------------|
| 2020-12-01 | 2020-12-01 08:00:00.000 |
+------------+-------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 5 начина да получите краткото име на месеца от дата в SQL Server

  2. Поточно предаване на базирани на данни изображения с помощта на HttpHandler

  3. SQL Server е еквивалентен на изгледа CREATE OR REPLACE на Oracle

  4. Заявка за възстановяване на индекс на SQL Server

  5. Разделете низ, разделен със запетая, и вмъкнете в таблица (int)