W SQL Server możesz użyć CAST()
funkcja do konwersji wyrażenia jednego typu danych na inny. Ta funkcja działa prawie tak samo jak CONVERT()
funkcji, z wyjątkiem tego, że składnia jest nieco inna (i CAST()
nie akceptuje style
argument).
Więc jeśli potrzebujesz przekonwertować ciąg na wartość daty/czasu, możesz użyć CONVERT()
funkcja lub CAST()
funkcja.
A jeśli wystąpi błąd podczas używania tych dwóch funkcji, PARSE()
funkcja może być właśnie tym, czego potrzebujesz.
Ten artykuł zawiera przykłady użycia CAST()
funkcja.
Składnia
Składnia wygląda tak:
CAST ( expression AS data_type [ ( length ) ] )
Te argumenty są zdefiniowane w następujący sposób:
expression
- Dowolne prawidłowe wyrażenie.
data_type
- Docelowy typ danych. Obejmuje to xml , duży i sql_variant . Nie można używać typów danych aliasów.
length
- Opcjonalna liczba całkowita, która określa długość docelowego typu danych. Domyślna wartość to
30
.
Przykład 1 – Konwertuj na typ danych daty
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 | +------------+
Tak jak w przypadku CONVERT()
ciąg musi być w stylu, który można przekonwertować na określony typ danych, w przeciwnym razie otrzymasz błąd:
SELECT CAST('Homer' AS date) AS Result;
Wynik:
Conversion failed when converting date and/or time from character string.
Przykład 2 – Konwersja na typ danych data/godzina
W tym przykładzie konwertujemy na data-godzina typ danych:
SELECT CAST('20 Dec 2018' AS datetime) AS Result;
Wynik:
+-------------------------+ | Result | |-------------------------| | 2018-12-20 00:00:00.000 | +-------------------------+
Możesz również określić czas wraz z datą:
SELECT CAST('2pm 20 Dec 2018' AS datetime) AS Result;
Wynik:
+-------------------------+ | Result | |-------------------------| | 2018-12-20 14:00:00.000 | +-------------------------+
Przykład 3 – Konwersja do typu danych datetime2
Tutaj konwertujemy na datetime2 typ danych:
SELECT CAST('20 Dec 2018' AS datetime2) AS Result;
Wynik:
+-----------------------------+ | Result | |-----------------------------| | 2018-12-20 00:00:00.0000000 | +-----------------------------+
Przykład 4 – Konwersja na typ danych datatimeoffset
W tym przykładzie konwertujemy na przesunięcie daty i godziny typ danych:
SELECT CAST('20 Dec 2018' AS datetimeoffset) AS Result;
Wynik:
+------------------------------------+ | Result | |------------------------------------| | 2018-12-20 00:00:00.0000000 +00:00 | +------------------------------------+
Przykład 5 – Konwersja do typu danych smalldatetime
Tutaj konwertujemy na smalldatetime typ danych:
SELECT CAST('20 Dec 2018' AS smalldatetime) AS Result;
Wynik:
+---------------------+ | Result | |---------------------| | 2018-12-20 00:00:00 | +---------------------+
Przykład 6 – Konwersja na typ danych czasu
W tym przykładzie konwertujemy na czas typ danych:
SELECT CAST('20 Dec 2018' AS time) AS Result;
Wynik:
+----------+ | Result | |----------| | 00:00:00 | +----------+
W takim przypadku podaliśmy datę, ale nie godzinę, więc wróciła jako 00:00:00
. Oto kolejny przykład, w którym faktycznie określamy czas:
SELECT CAST('2pm' AS time) AS Result;
Wynik:
+----------+ | Result | |----------| | 14:00:00 | +----------+
Ale jeśli dodamy datę, otrzymamy błąd (w przeciwieństwie do wcześniejszego przykładu, kiedy przekonwertowaliśmy na data-godzina ):
SELECT CAST('2pm 20 Dec 2018' AS time) AS Result;
Wynik:
Conversion failed when converting date and/or time from character string.
Więc w tym przypadku musisz przekonwertować na data i godzina lub smalldatetime .
Przykład 7 – pominięcie daty
Jeśli pominiesz datę podczas konwersji na data-godzina lub smalldatetime typy danych, zwróci 1900-01-01
jako data:
SELECT CAST('2pm' AS datetime) AS Result;
Wynik:
+-------------------------+ | Result | |-------------------------| | 1900-01-01 14:00:00.000 | +-------------------------+
Jeśli wolisz używać CONVERT()
funkcji, zobacz te ciągi do daty/czasu CONVERT()
przykłady wykorzystujące te same przykłady co powyżej.
Ponadto, jak wspomniano, jeśli wystąpi błąd podczas próby konwersji ciągu na datę, wypróbuj PARSE()
funkcja zamiast. Będzie działać w niektórych przypadkach, gdy CAST()
nie.