sql >> Databasteknik >  >> RDS >> Sqlserver

Exempel på att konvertera "datum" till "datumtid" i SQL Server (T-SQL)

Den här artikeln innehåller exempel på hur du konverterar ett datum värde till en datumtid värde i SQL Server.

När du konverterar ett datum värde till datetime , extra information läggs till värdet. Detta beror på att datetime datatypen innehåller information om både datum och tid. datumet datatyp, å andra sidan, innehåller endast datuminformation.

Exempel 1 – Implicit konvertering

Här är ett exempel på en implicit konvertering mellan datum och datumtid .

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

Resultat:

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

Detta är en implicit konvertering eftersom vi inte använder en konverteringsfunktion (som de nedan) för att explicit konvertera den. I det här fallet utför SQL Server en implicit konvertering bakom kulisserna när vi försöker tilldela datumet värde till en datumtid variabel.

Vi kan se att datumet variabeln innehåller endast datuminformation, medan datetime variabeln innehåller information om både datum och tid.

När du konverterar mellan datum och datumtid , är tidskomponenten inställd på 00:00:00.000 . Detta beror på att datumvärdet inte innehåller någon tidsinformation, så det finns inget sätt för SQL Server att veta vilken tid du vill (om någon).

Exempel 2 – Ändra tiden

Om du behöver ändra tiden (men behålla samma datum), kan du använda DATEADD() funktion för att göra just det.

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';

Resultat:

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

Exempel 3 – Explicit konvertering med CAST()

Här är ett exempel på en explicit konvertering. I det här fallet använder jag CAST() funktion direkt inom SELECT uttalande för att uttryckligen konvertera mellan datum och datumtid .

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

Resultat:

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

Så vi får samma resultat som den implicita konverteringen.

Vi kan också justera tiden så här:

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

Resultat:

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

Exempel 4 – Explicit konvertering med CONVERT()

Här är ett exempel på en explicit konvertering med CONVERT() funktion istället för CAST() .

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

Resultat:

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

Och justera tiden:

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

Resultat:

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

  1. Kan jag använda CASE-satsen i ett JOIN-tillstånd?

  2. Lägg till Ordinal Indicator till ett datum i Oracle

  3. En datamodell för restaurangleverans

  4. Hur frågar jag DATETIME-fältet med endast datum i Microsoft SQL Server?