sql >> Database >  >> RDS >> Sqlserver

Voorbeelden van het converteren van 'date' naar 'datetime' in SQL Server (T-SQL)

Dit artikel bevat voorbeelden van het converteren van een datum waarde naar een datetime waarde in SQL Server.

Wanneer u een datum converteert waarde tot datetime , wordt er extra informatie aan de waarde toegevoegd. Dit komt omdat de datetime gegevenstype bevat zowel datum- als tijdinformatie. De datum gegevenstype daarentegen bevat alleen datuminformatie.

Voorbeeld 1 – Impliciete conversie

Hier is een voorbeeld van een impliciete conversie tussen datum en datetime .

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

Resultaat:

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

Dit is een impliciete conversie omdat we geen conversiefunctie (zoals hieronder) gebruiken om deze expliciet te converteren. In dit geval voert SQL Server achter de schermen een impliciete conversie uit wanneer we proberen de datum toe te wijzen waarde naar een datetime variabel.

We kunnen zien dat de datum variabele bevat alleen datuminformatie, terwijl de datetime variabele bevat zowel datum- als tijdinformatie.

Wanneer u converteert tussen datum en datetime , de tijdcomponent is ingesteld op 00:00:00.000 . Dit komt omdat de datumwaarde geen tijdinformatie bevat, dus SQL Server kan op geen enkele manier weten hoe laat u wilt (indien aanwezig).

Voorbeeld 2 – Wijzig de tijd

Als u de tijd wilt wijzigen (maar dezelfde datum wilt behouden), kunt u de DATEADD() gebruiken functie om precies dat te doen.

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

Resultaat:

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

Voorbeeld 3 – Expliciete conversie met CAST()

Hier is een voorbeeld van een expliciete conversie. In dit geval gebruik ik de CAST() functie direct binnen de SELECT statement om expliciet te converteren tussen datum en datetime .

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

Resultaat:

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

We krijgen dus hetzelfde resultaat als de impliciete conversie.

We kunnen de tijd ook als volgt aanpassen:

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

Resultaat:

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

Voorbeeld 4 – Expliciete conversie met CONVERT()

Hier is een voorbeeld van een expliciete conversie met de CONVERT() functie in plaats van CAST() .

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

Resultaat:

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

En de tijd aanpassen:

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

Resultaat:

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

  1. Hoe krijg ik toegang tot de MySQL-opdrachtregel met XAMPP voor Windows?

  2. Wat is Ongedaan maken en opnieuw doen in de Oracle-database?

  3. SQL Server-lus - hoe loop ik door een set records?

  4. Mysql:selecteer rijen uit een tabel die niet in een andere staan