Ако трябва да преобразувате низ в стойност за дата/час в SQL Server, имате редица опции. В тази публикация очертавам шест T-SQL функции, които ви позволяват да правите това.
Шестте функции са:
CAST()
CONVERT()
PARSE()
TRY_CAST()
TRY_CONVERT()
TRY_PARSE()
По-долу са дадени примери за това как можете да използвате тези функции, за да преобразувате низ в тип данни за дата/час.
Функцията CAST()
В този пример преобразуваме низа в дата тип данни (указваме това с помощта на date
като втория аргумент).
SELECT CAST('20 Dec 2018' AS date) AS Result;
Резултат:
+------------+ | Result | |------------| | 2018-12-20 | +------------+
За повече примери вижте Как да конвертирате низ в дата/час в SQL Server с помощта на CAST()
.
Функцията CONVERT()
Тук правим същото преобразуване като предишния пример, но с CONVERT()
функция. Единствената разлика тук е синтаксисът.
SELECT CONVERT(date, '20 Dec 2018') AS Result;
Резултат:
+------------+ | Result | |------------| | 2018-12-20 | +------------+
За повече примери вижте Как да конвертирате низ в дата/час в SQL Server с помощта на CONVERT()
.
Функцията PARSE()
В този пример добавям деня от седмицата като част от низа. Причината да правя това е да демонстрирам ползата, която тази функция има пред останалите. Ако предоставите датата в този формат на другите функции, ще получите грешка. Но PARSE()
функцията може да се справи с това:
SELECT PARSE('Thursday, 20 Dec 2018' AS datetime2) AS 'Result';
Резултат:
+-----------------------------+ | Result | |-----------------------------| | 2018-12-20 00:00:00.0000000 | +-----------------------------+
За повече примери вижте Как да конвертирате низ в дата/час в SQL Server с помощта на PARSE()
.
Функцията TRY_CAST()
Можете да използвате TRY_CAST()
вместо CAST()
за осигуряване на по-плавен начин за обработка на грешки. Когато използвате CAST()
функция, ако прехвърлянето се провали, тя връща грешка. Въпреки това, ако използвате TRY_CAST()
функция вместо това връща NULL
в такива случаи.
Ето пример за неуспешно предаване:
SELECT TRY_CAST('Next month' AS date) AS Result;
Резултат:
+----------+ | Result | |----------| | NULL | +----------+
Ако предоставим същата стойност на CAST()
функция вместо това, ето какво се случва:
SELECT CAST('Next month' AS date) AS Result;
Резултат:
Conversion failed when converting date and/or time from character string.
За повече примери вижте CAST
срещу TRY_CAST
в SQL Server:Каква е разликата?
Функцията TRY_CONVERT()
Можете също да използвате TRY_CONVERT()
вместо CONVERT()
за по-добра обработка на грешки. Ако CONVERT()
функция не успее, връща грешка. Но ако TRY_CONVERT()
неуспешно, връща NULL
.
Ето пример за неуспешна реализация:
SELECT TRY_CONVERT(date, 'Next month') AS Result;
Резултат:
+----------+ | Result | |----------| | NULL | +----------+
Ако предоставим същата стойност на CONVERT()
функция вместо това, ето какво се случва:
SELECT CONVERT(date, 'Next month') AS Result;
Резултат:
Conversion failed when converting date and/or time from character string.
За повече примери вижте CONVERT
срещу TRY_CONVERT
в SQL Server:Каква е разликата?
Функцията TRY_PARSE()
Можете също да използвате TRY_PARSE()
вместо PARSE()
за по-добра обработка на грешки. Ако PARSE()
функция не успее, връща грешка. Но ако TRY_PARSE()
неуспешно, връща NULL
.
Ето пример за неуспешна реализация:
SELECT TRY_PARSE('Next month' AS date) AS Result;
Резултат:
+----------+ | Result | |----------| | NULL | +----------+
Ако предоставим същата стойност на PARSE()
функция вместо това, ето какво се случва:
SELECT PARSE('Next month' AS date) AS Result;
Резултат:
Error converting string value 'Next month' into data type date using culture ''.