В SQL Server можете да използвате CAST()
функция за преобразуване на израз от един тип данни в друг. Тази функция работи почти по същия начин като CONVERT()
функция, с изключение на това, че синтаксисът е малко по-различен (и CAST()
не приема style
аргумент).
Така че, ако трябва да конвертирате низ в стойност за дата/час, можете да използвате CONVERT()
функция или CAST()
функция.
И ако получите грешка, докато използвате тези две функции, PARSE()
функцията може да е точно това, от което се нуждаете.
Тази статия съдържа примери за използване на CAST()
функция.
Синтаксис
Синтаксисът е така:
CAST ( expression AS data_type [ ( length ) ] )
Тези аргументи се дефинират, както следва:
expression
- Всякакъв валиден израз.
data_type
- Целевият тип данни. Това включва xml , голям и sql_variant . Типовете данни за псевдоним не могат да се използват.
length
- Незадължително цяло число, което определя дължината на целевия тип данни. Стойността по подразбиране е
30
.
Пример 1 – Преобразуване на тип данни за дата
В този пример преобразуваме низа в дата тип данни (указваме това с помощта на date
като втория аргумент).
SELECT CAST('20 Dec 2018' AS date) AS Result;
Резултат:
+------------+ | Result | |------------| | 2018-12-20 | +------------+
Точно както с CONVERT()
низът трябва да е в стил, който може да се преобразува в посочения тип данни, в противен случай ще получите грешка:
SELECT CAST('Homer' AS date) AS Result;
Резултат:
Conversion failed when converting date and/or time from character string.
Пример 2 – Преобразуване в тип данни за дата и час
В този пример преобразуваме в datetime тип данни:
SELECT CAST('20 Dec 2018' AS datetime) AS Result;
Резултат:
+-------------------------+ | Result | |-------------------------| | 2018-12-20 00:00:00.000 | +-------------------------+
Можете също да посочите часа заедно с датата:
SELECT CAST('2pm 20 Dec 2018' AS datetime) AS Result;
Резултат:
+-------------------------+ | Result | |-------------------------| | 2018-12-20 14:00:00.000 | +-------------------------+
Пример 3 – Преобразуване в тип данни datetime2
Тук преобразуваме в datetime2 тип данни:
SELECT CAST('20 Dec 2018' AS datetime2) AS Result;
Резултат:
+-----------------------------+ | Result | |-----------------------------| | 2018-12-20 00:00:00.0000000 | +-----------------------------+
Пример 4 – Преобразуване в тип данни datetimeoffset
В този пример преобразуваме в datetimeoffset тип данни:
SELECT CAST('20 Dec 2018' AS datetimeoffset) AS Result;
Резултат:
+------------------------------------+ | Result | |------------------------------------| | 2018-12-20 00:00:00.0000000 +00:00 | +------------------------------------+
Пример 5 – Преобразуване в тип данни smalldatetime
Тук преобразуваме в smalldatetime тип данни:
SELECT CAST('20 Dec 2018' AS smalldatetime) AS Result;
Резултат:
+---------------------+ | Result | |---------------------| | 2018-12-20 00:00:00 | +---------------------+
Пример 6 – Преобразуване във времеви тип данни
В този пример преобразуваме във време тип данни:
SELECT CAST('20 Dec 2018' AS time) AS Result;
Резултат:
+----------+ | Result | |----------| | 00:00:00 | +----------+
В този случай посочихме дата, но не и час, така че се върна като 00:00:00
. Ето още един пример, в който всъщност указваме време:
SELECT CAST('2pm' AS time) AS Result;
Резултат:
+----------+ | Result | |----------| | 14:00:00 | +----------+
Но ако добавим датата, получаваме грешка (за разлика от по-ранен пример, когато преобразувахме в datetime ):
SELECT CAST('2pm 20 Dec 2018' AS time) AS Result;
Резултат:
Conversion failed when converting date and/or time from character string.
Така че в този случай ще трябва да преобразувате в datetime или smalldatetime .
Пример 7 – Пропускане на датата
Ако пропуснете датата, докато преобразувате в datetime или smalldatetime типове данни, той ще върне 1900-01-01
като дата:
SELECT CAST('2pm' AS datetime) AS Result;
Резултат:
+-------------------------+ | Result | |-------------------------| | 1900-01-01 14:00:00.000 | +-------------------------+
Ако предпочитате да използвате CONVERT()
функция, вижте тези низове за дата/час CONVERT()
примери, използващи същите примери като по-горе.
Също така, както споменахме, ако получите грешка, докато се опитвате да преобразувате низ в дата, опитайте PARSE()
функция вместо това. Ще работи в някои случаи, когато CAST()
не.