sql >> Database teknologi >  >> RDS >> Sqlserver

Konverter 'smalldatetime' til 'datetime' i SQL Server (T-SQL-eksempler)

Denne artikel indeholder eksempler på konvertering af en smalldatetime værdi til en datotid værdi i SQL Server.

Den smalldatetime datatypen har ikke nogen brøksekunder, og dens sekunder-komponent er altid sat til nul (:00). Dens nøjagtighed er til nærmeste minut.

datoen datatypen på den anden side inkluderer en 3-cifret brøksekundersdel, og dens nøjagtighed er afrundet til trin på 0,000, 003 eller 0,007 sekunder.

Når du konverterer en smalldatetime værdi til datetime , smalldatetime værdien kopieres til datetime værdi. Brøksekunderne er sat til 0.

I de fleste tilfælde ville du være bedre stillet til at konvertere til en datetime2 datatype i stedet for en datetime . At gøre dette vil give øget nøjagtighed, mens du bruger den samme lagerstørrelse. Men hvis du virkelig har brug for, at det er datetime , her er nogle eksempler.

Eksempel 1 – Implicit konvertering

Her er et eksempel på en implicit konvertering mellem smalldatetime og datotid .

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 |
+---------------------+-------------------------+

Dette er en implicit konvertering, fordi vi ikke bruger en konverteringsfunktion (som dem nedenfor) til eksplicit at konvertere den. I dette tilfælde udfører SQL Server en implicit konvertering bag kulisserne, når vi forsøger at tildele smalldatetime værdi til en datotid variabel.

I dette eksempel kan vi se, at smalldatetime værdien inkluderer ikke brøksekunderne, sekunderne er blevet sat til nul, og minuttet er rundet op fra den faktiske værdi, som jeg forsøgte at tildele den.

Men datotidspunktet værdi inkluderer en 3-cifret brøkdel, der er sat til nul.

Eksempel 2 – Skift brøkdelen

Selvom brøkdelen er sat til nul, når du har konverteret værdien til datetime , er du nu i stand til at ændre brøkdelen (og sekunddelen for den sags skyld).

I dette eksempel bruger jeg DATEADD() funktion til at ændre brøkdelen af ​​sekunder af datetime værdi.

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 (ved hjælp af lodret output):

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

Eksempel 3 – Eksplicit konvertering ved hjælp af CAST()

Her er et eksempel på en eksplicit konvertering. I dette tilfælde bruger jeg CAST() funktion direkte i SELECT sætning til eksplicit at konvertere mellem smalldatetime og datotid .

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 |
+---------------------+-------------------------+

Eksempel 4 – Eksplicit konvertering ved hjælp af CONVERT()

Her er et eksempel på en eksplicit konvertering ved hjælp af CONVERT() funktion i stedet for 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ævnt kan du overveje at konvertere til en datetime2 datatype i stedet for datetime . Dette giver øget nøjagtighed, mens du bruger den samme lagerstørrelse.


  1. Easysoft frigiver ODBC-ODBC Bridge til Windows 10

  2. Rammen for et Apache Spark Job Run!

  3. Tilfældig værdi for kolonnen DATETIME

  4. SQL Server:VÆLG kun rækkerne med MAX(DATE)