sql >> Databasteknik >  >> RDS >> Sqlserver

Konvertera 'smalldatetime' till 'datetime' i SQL Server (T-SQL-exempel)

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

smalldatetime datatypen har inga bråkdelar av sekunder, och dess sekundkomponent är alltid noll (:00). Dess noggrannhet är till närmaste minut.

datetime datatypen å andra sidan inkluderar en 3-siffrig bråkdelssekundersdel, och dess noggrannhet avrundas till steg om 0,000, 0,003 eller 0,007 sekunder.

När du konverterar en smalldatetime värde till datetime , smalldatetime värdet kopieras till datetime värde. Bråksekunderna är inställda på 0.

I de flesta fall är det bättre att du konverterar till en datetime2 datatyp istället för en datetime . Att göra detta kommer att ge ökad noggrannhet samtidigt som du använder samma lagringsstorlek. Men om du verkligen behöver vara datetime , här är några exempel.

Exempel 1 – Implicit konvertering

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

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

Resultat:

+---------------------+-------------------------+
| smalldatetime       | datetime                |
|---------------------+-------------------------|
| 2025-05-21 10:16:00 | 2025-05-21 10:16: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 smalldatetime värde till en datumtid variabel.

I det här exemplet kan vi se att smalldatetime värdet inkluderar inte bråksekunderna, sekunderna har ställts in på noll och minuten har avrundats uppåt från det faktiska värdet som jag försökte tilldela den.

Men datumtid värdet inkluderar en 3-siffrig bråkdel som är inställd på noll.

Exempel 2 – Ändra bråkdelen

Även om bråkdelen är inställd på noll, när du har konverterat värdet till datetime , du kan nu ändra bråkdelen (och sekunddelen för den delen).

I det här exemplet använder jag DATEADD() funktion för att ändra bråkdelssekunderna av datetime värde.

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

Resultat (med vertikal utdata):

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

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 smalldatetime och datumtid .

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

Resultat:

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

Resultat:

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

Som nämnts, överväg att konvertera till en datetime2 datatyp istället för datetime . Att göra detta ger ökad noggrannhet samtidigt som du använder samma lagringsstorlek.


  1. Hur Time()-funktionen fungerar i SQLite

  2. Ytterligare ett argument för lagrade procedurer

  3. Går PostgreSQL långsamt? Tips och knep för att komma till källan

  4. Hur man ansluter Struts 2 med Hibernate och PostgreSQL