sql >> Databasteknik >  >> RDS >> Sqlserver

Exempel på att konvertera "smalldatetime" till "datetime" i SQL Server (T-SQL)

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

När du konverterar en smalldatetime värde till datetime , timmarna och minuterna kopieras och sekunderna och bråkdelssekunderna ställs in på 0 .

Exempel 1 – 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 explicit konvertera från smalldatetime till datumtid .

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

Resultat:

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

För det första kan vi se att thesmalldatetime värde använder 00 för komponenten sekunder, även om vi uttryckligen ställer in den på 29 . Detta beror på att när du använder thesmalldatetime datatyp är sekunderna alltid noll (och utan bråkdelar).

Därför, när vi konverterar värdet till datetime , ställs sekundvärdet (och bråkdelssekunder) till noll. Hade vi bara tilldelat det ursprungliga värdet till datetime i första hand skulle sekunderna ha förblivit intakta:

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

Resultat:

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

Inte bara sekunderna skulle förbli intakta, utan även bråkdelar av sekunder skulle ha förblivit intakta (men bara upp till en skala från 3):

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

Resultat:

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

Exempel 2 – Avrundning

Här är vad som händer om vi ställer in sekundskomponenten till ett högre värde innan vi tilldelar den till smalldatetime data typ.

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

Resultat:

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

Så minutkomponenten avrundas nu uppåt till nästa minut.

Exempel 3 – Explicit konvertering med CONVERT()

Detta är samma som det första exemplet, förutom att den här gången använder jag CONVERT() funktion istället för CAST() .

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

Resultat:

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

Exempel 4 – Implicit konvertering

Här är ett exempel på att göra samma sak, men med en implicit typkonvertering.

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

Resultat:

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

Så vi får samma resultat, oavsett om det är en explicit eller implicit konvertering.

Detta är en implicit konvertering eftersom vi inte använder en konverteringsfunktion för att explicit konvertera den. Vi tilldelar helt enkelt värdet från en variabel av en datatyp till en variabel av en annan datatyp. I det här fallet utför SQL Server en implicit konvertering bakom kulisserna när vi försöker tilldela smalldatetime värde till en datumtid variabel.


  1. SQL Server 2017:Kopiera SQL Server-data från Linux till Windows med SSIS

  2. Skapar användare med krypterat lösenord i PostgreSQL

  3. 8 sätt att lägga till minuter till en Datetime i MariaDB

  4. Välj SQL Server-databasstorlek