sql >> Database >  >> RDS >> Sqlserver

Converteer 'smalldatetime' naar 'datetime' in SQL Server (T-SQL-voorbeelden)

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

De smalldatetime gegevenstype heeft geen fractionele seconden en de secondencomponent is altijd ingesteld op nul (:00). De nauwkeurigheid is tot op de minuut nauwkeurig.

De datetime gegevenstype aan de andere kant, bevat een 3-cijferig gedeelte van een fractie van een seconde, en de nauwkeurigheid wordt afgerond op stappen van .000, .003 of .007 seconden.

Wanneer u een smalldatetime . converteert waarde tot datetime , de smalldatetime waarde wordt gekopieerd naar de datetime waarde. De fractionele seconden zijn ingesteld op 0.

In de meeste gevallen kunt u beter converteren naar een datetime2 gegevenstype in plaats van een datetime . Als u dit doet, krijgt u een grotere nauwkeurigheid, terwijl u dezelfde opslaggrootte gebruikt. Als je het echter echt nodig hebt, is het datetime , hier zijn enkele voorbeelden.

Voorbeeld 1 – Impliciete conversie

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

DECLARE 
  @thesmalldatetime smalldatetime,
  @thedatetime datetime;
SET @thesmalldatetime = '2025-05-21 10:15:30';
SET @thedatetime = @thesmalldatetime;
SELECT 
  @thesmalldatetime AS 'smalldatetime',
  @thedatetime AS 'datetime';

Resultaat:

+---------------------+-------------------------+
| smalldatetime       | datetime                |
|---------------------+-------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16: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 smalldatetime toe te wijzen waarde naar een datetime variabel.

In dit voorbeeld kunnen we zien dat de smalldatetime waarde omvat niet de fractionele seconden, de seconden zijn ingesteld op nul en de minuut is naar boven afgerond vanaf de werkelijke waarde die ik eraan heb proberen toe te wijzen.

Echter, de datetime waarde bevat een 3-cijferig breukdeel dat is ingesteld op nul.

Voorbeeld 2 – Verander het fractionele deel

Ook al is het breukdeel op nul gezet, als je de waarde eenmaal hebt geconverteerd naar datetime , kunt u nu het breukgedeelte (en het secondengedeelte trouwens) wijzigen.

In dit voorbeeld gebruik ik de DATEADD() functie om de fractionele seconden van datetime . te wijzigen waarde.

DECLARE 
  @thesmalldatetime smalldatetime,
  @thedatetime datetime;
SET @thesmalldatetime = '2025-05-21 10:15:30';
SET @thedatetime = @thesmalldatetime;
SELECT 
  @thesmalldatetime AS 'smalldatetime',
  @thedatetime AS 'datetime',
  DATEADD(millisecond, 123, @thedatetime) AS 'datetime Modified';

Resultaat (met verticale uitvoer):

smalldatetime     | 2025-05-21 10:16:00
datetime          | 2025-05-21 10:16:00.000
datetime Modified | 2025-05-21 10:16:00.123

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 smalldatetime en datetime .

DECLARE @thesmalldatetime smalldatetime;
SET @thesmalldatetime = '2025-05-21 10:15:30';
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CAST(@thesmalldatetime AS datetime) AS 'datetime';

Resultaat:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16: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 @thesmalldatetime smalldatetime;
SET @thesmalldatetime = '2025-05-21 10:15:30';
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CONVERT(datetime, @thesmalldatetime) AS 'datetime';

Resultaat:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16:00.000 |
+---------------------+-------------------------+

Zoals gezegd, overweeg om te converteren naar een datetime2 gegevenstype in plaats van datetime . Als u dit doet, krijgt u meer nauwkeurigheid, terwijl u dezelfde opslagruimte gebruikt.


  1. PDO::fetchAll vs. PDO::fetch in a loop

  2. De wizard Kruistabelquery gebruiken in Access

  3. hoe stuur e-mail door Pl/sql

  4. LIKE gebruiken in bindParam voor een MySQL PDO-query