Jeśli musisz przekonwertować ciąg na wartość daty/godziny w SQL Server, masz kilka opcji. W tym poście opisuję sześć funkcji T-SQL, które pozwalają to zrobić.
Sześć funkcji to:
CAST()CONVERT()PARSE()TRY_CAST()TRY_CONVERT()TRY_PARSE()
Poniżej znajduje się przykład, w jaki sposób można użyć tych funkcji do konwersji ciągu na typ danych typu data/godzina.
Funkcja CAST()
W tym przykładzie konwertujemy ciąg na datę typ danych (określamy go za pomocą date jako drugi argument).
SELECT CAST('20 Dec 2018' AS date) AS Result; Wynik:
+------------+ | Result | |------------| | 2018-12-20 | +------------+
Aby uzyskać więcej przykładów, zobacz Jak przekonwertować ciąg na datę/godzinę w SQL Server przy użyciu CAST() .
Funkcja CONVERT()
Tutaj wykonujemy tę samą konwersję, co w poprzednim przykładzie, ale z CONVERT() funkcjonować. Jedyną różnicą jest tutaj składnia.
SELECT CONVERT(date, '20 Dec 2018') AS Result;
Wynik:
+------------+ | Result | |------------| | 2018-12-20 | +------------+
Aby uzyskać więcej przykładów, zobacz Jak przekonwertować ciąg na datę/godzinę w SQL Server za pomocą CONVERT() .
Funkcja PARSE()
W tym przykładzie dodaję dzień tygodnia jako część ciągu. Powodem, dla którego to robię, jest zademonstrowanie przewagi, jaką ta funkcja ma nad innymi. Jeśli podasz datę w tym formacie innym funkcjom, otrzymasz błąd. Ale PARSE() funkcja może to obsłużyć:
SELECT PARSE('Thursday, 20 Dec 2018' AS datetime2)
AS 'Result'; Wynik:
+-----------------------------+ | Result | |-----------------------------| | 2018-12-20 00:00:00.0000000 | +-----------------------------+
Aby uzyskać więcej przykładów, zobacz Jak przekonwertować ciąg na datę/godzinę w SQL Server przy użyciu PARSE() .
Funkcja TRY_CAST()
Możesz użyć TRY_CAST() zamiast CAST() aby zapewnić płynniejszy sposób obsługi błędów. Podczas korzystania z CAST() funkcja, jeśli rzutowanie się nie powiedzie, zwraca błąd. Jeśli jednak użyjesz TRY_CAST() zamiast tego zwraca NULL w takich przypadkach.
Oto przykład niepowodzenia rzutowania:
SELECT TRY_CAST('Next month' AS date) AS Result; Wynik:
+----------+ | Result | |----------| | NULL | +----------+
Jeśli podamy tę samą wartość do CAST() zamiast tego, oto co się dzieje:
SELECT CAST('Next month' AS date) AS Result; Wynik:
Conversion failed when converting date and/or time from character string.
Więcej przykładów znajdziesz w CAST vs TRY_CAST w SQL Server:jaka jest różnica?
Funkcja TRY_CONVERT()
Możesz także użyć TRY_CONVERT() zamiast CONVERT() dla lepszej obsługi błędów. Jeśli CONVERT() funkcja nie powiedzie się, zwraca błąd. Ale jeśli TRY_CONVERT() nie powiedzie się, zwraca NULL .
Oto przykład nieudanej konwersji:
SELECT TRY_CONVERT(date, 'Next month') AS Result;
Wynik:
+----------+ | Result | |----------| | NULL | +----------+
Jeśli podamy tę samą wartość do CONVERT() zamiast tego, oto co się dzieje:
SELECT CONVERT(date, 'Next month') AS Result;
Wynik:
Conversion failed when converting date and/or time from character string.
Więcej przykładów znajdziesz w CONVERT kontra TRY_CONVERT w SQL Server:jaka jest różnica?
Funkcja TRY_PARSE()
Możesz także użyć TRY_PARSE() zamiast PARSE() dla lepszej obsługi błędów. Jeśli PARSE() funkcja nie powiedzie się, zwraca błąd. Ale jeśli TRY_PARSE() nie powiedzie się, zwraca NULL .
Oto przykład nieudanej konwersji:
SELECT TRY_PARSE('Next month' AS date) AS Result; Wynik:
+----------+ | Result | |----------| | NULL | +----------+
Jeśli dostarczymy tę samą wartość do PARSE() zamiast tego, oto co się dzieje:
SELECT PARSE('Next month' AS date) AS Result; Wynik:
Error converting string value 'Next month' into data type date using culture ''.