Om du behöver konvertera en sträng till ett datum/tidsvärde i SQL Server, har du ett antal alternativ. I det här inlägget beskriver jag sex T-SQL-funktioner som låter dig göra detta.
De sex funktionerna är:
CAST()
CONVERT()
PARSE()
TRY_CAST()
TRY_CONVERT()
TRY_PARSE()
Nedan finns exempel på hur du kan använda dessa funktioner för att konvertera en sträng till en datatyp för datum/tid.
CAST()-funktionen
I det här exemplet konverterar vi strängen till ett datum datatyp (vi anger detta genom att använda date
som det andra argumentet).
SELECT CAST('20 Dec 2018' AS date) AS Result;
Resultat:
+------------+ | Result | |------------| | 2018-12-20 | +------------+
För fler exempel, se Hur man konverterar en sträng till ett datum/tid i SQL Server med CAST()
.
Funktionen CONVERT()
Här gör vi samma konvertering som föregående exempel, men med CONVERT()
fungera. Den enda skillnaden här är syntaxen.
SELECT CONVERT(date, '20 Dec 2018') AS Result;
Resultat:
+------------+ | Result | |------------| | 2018-12-20 | +------------+
För fler exempel, se Hur man konverterar en sträng till ett datum/tid i SQL Server med CONVERT()
.
FUNKTIONEN PARSE()
I det här exemplet lägger jag till veckodagen som en del av strängen. Anledningen till att jag gör detta är för att visa fördelen som denna funktion har över de andra. Om du anger datumet i det här formatet till de andra funktionerna får du ett felmeddelande. Men PARSE()
funktion kan hantera detta:
SELECT PARSE('Thursday, 20 Dec 2018' AS datetime2) AS 'Result';
Resultat:
+-----------------------------+ | Result | |-----------------------------| | 2018-12-20 00:00:00.0000000 | +-----------------------------+
För fler exempel, se Hur man konverterar en sträng till ett datum/tid i SQL Server med PARSE()
.
TRY_CAST()-funktionen
Du kan använda TRY_CAST()
istället för CAST()
för att ge ett smidigare sätt att hantera fel. När du använder CAST()
funktion, om casten misslyckas returnerar den ett fel. Men om du använder TRY_CAST()
funktion istället returnerar den NULL
i sådana fall.
Här är ett exempel på en misslyckad rollbesättning:
SELECT TRY_CAST('Next month' AS date) AS Result;
Resultat:
+----------+ | Result | |----------| | NULL | +----------+
Om vi tillhandahåller samma värde till CAST()
funktion istället, här är vad som händer:
SELECT CAST('Next month' AS date) AS Result;
Resultat:
Conversion failed when converting date and/or time from character string.
För fler exempel, se CAST
kontra TRY_CAST
i SQL Server:Vad är skillnaden?
TRY_CONVERT()-funktionen
Du kan också använda TRY_CONVERT()
istället för CONVERT()
för bättre felhantering. Om CONVERT()
funktionen misslyckas den returnerar ett fel. Men om TRY_CONVERT()
misslyckas, returnerar den NULL
.
Här är ett exempel på en konvertering som misslyckades:
SELECT TRY_CONVERT(date, 'Next month') AS Result;
Resultat:
+----------+ | Result | |----------| | NULL | +----------+
Om vi tillhandahåller samma värde till CONVERT()
funktion istället, här är vad som händer:
SELECT CONVERT(date, 'Next month') AS Result;
Resultat:
Conversion failed when converting date and/or time from character string.
För fler exempel, se CONVERT
kontra TRY_CONVERT
i SQL Server:Vad är skillnaden?
TRY_PARSE()-funktionen
Du kan också använda TRY_PARSE()
istället för PARSE()
för bättre felhantering. Om PARSE()
funktionen misslyckas den returnerar ett fel. Men om TRY_PARSE()
misslyckas, returnerar den NULL
.
Här är ett exempel på en konvertering som misslyckades:
SELECT TRY_PARSE('Next month' AS date) AS Result;
Resultat:
+----------+ | Result | |----------| | NULL | +----------+
Om vi tillhandahåller samma värde till PARSE()
funktion istället, här är vad som händer:
SELECT PARSE('Next month' AS date) AS Result;
Resultat:
Error converting string value 'Next month' into data type date using culture ''.