sql >> Database >  >> RDS >> Sqlserver

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

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

Wanneer u een smalldatetime . converteert waarde tot datetime , worden de uren en minuten gekopieerd en worden de seconden en fracties van seconden ingesteld op 0 .

Voorbeeld 1 – 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 van smalldatetime tot datetime .

DECLARE @thesmalldatetime smalldatetime
SET @thesmalldatetime = '2031-03-25 11:15:29'
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CAST(@thesmalldatetime AS datetime) AS 'datetime';

Resultaat:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 |
+---------------------+-------------------------+

Ten eerste kunnen we zien dat de thesmalldatetime waarde gebruikt 00 voor de secondencomponent, ook al hebben we deze expliciet ingesteld op 29 . Dit komt omdat bij gebruik van de thesmalldatetime gegevenstype, de seconden zijn altijd nul (en zonder fractionele seconden).

Daarom, wanneer we de waarde converteren naar datetime , worden de secondenwaarde (en fractionele seconden) op nul gezet. Hadden we net de oorspronkelijke waarde toegewezen aan datetime in de eerste plaats zouden de seconden intact zijn gebleven:

DECLARE @thedatetime datetime
SET @thedatetime = '2031-03-25 11:15:29'
SELECT @thedatetime AS 'thedatetime';

Resultaat:

+-------------------------+
| thedatetime             |
|-------------------------|
| 2031-03-25 11:15:29.000 |
+-------------------------+

Niet alleen zouden de seconden intact blijven, maar ook eventuele fracties van seconden zouden intact zijn gebleven (maar alleen tot een schaal van 3):

DECLARE @thedatetime datetime
SET @thedatetime = '2031-03-25 11:15:29.123'
SELECT @thedatetime AS 'thedatetime';

Resultaat:

+-------------------------+
| thedatetime             |
|-------------------------|
| 2031-03-25 11:15:29.123 |
+-------------------------+

Voorbeeld 2 – Afronding

Dit is wat er gebeurt als we de secondencomponent op een hogere waarde instellen voordat we deze toewijzen aan de smalldatetime data type.

DECLARE @thesmalldatetime smalldatetime
SET @thesmalldatetime = '2031-03-25 11:15:31'
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CAST(@thesmalldatetime AS datetime) AS 'datetime';

Resultaat:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2031-03-25 11:16:00 | 2031-03-25 11:16:00.000 |
+---------------------+-------------------------+

Dus de minutencomponent wordt nu naar boven afgerond op de volgende minuut.

Voorbeeld 3 – Expliciete conversie met CONVERT()

Dit is hetzelfde als het eerste voorbeeld, behalve dat ik deze keer de CONVERT() . gebruik functie in plaats van CAST() .

DECLARE @thesmalldatetime smalldatetime
SET @thesmalldatetime = '2031-03-25 11:15:29'
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  CONVERT(datetime, @thesmalldatetime) AS 'datetime';

Resultaat:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 |
+---------------------+-------------------------+

Voorbeeld 4 – Impliciete conversie

Hier is een voorbeeld van hetzelfde doen, maar met een impliciete typeconversie.

DECLARE @thesmalldatetime smalldatetime, @thedatetime datetime
SET @thesmalldatetime = '2031-03-25 11:15:29'
SET @thedatetime = @thesmalldatetime
SELECT 
  @thesmalldatetime AS 'thesmalldatetime',
  @thedatetime AS 'datetime';

Resultaat:

+---------------------+-------------------------+
| thesmalldatetime    | datetime                |
|---------------------+-------------------------|
| 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 |
+---------------------+-------------------------+

We krijgen dus hetzelfde resultaat, ongeacht of het een expliciete of impliciete conversie is.

Dit is een impliciete conversie omdat we geen conversiefunctie gebruiken om deze expliciet te converteren. We wijzen eenvoudigweg de waarde van een variabele van het ene gegevenstype toe aan een variabele van een ander gegevenstype. 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.


  1. Oracle:Zoeken in volledige tekst met voorwaarde

  2. Tijdzone instellen in PHP en MySQL

  3. Handleidingen voor database-e-mail

  4. TreeView-besturingselement met subformulieren