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