Проблем:
Искате да преобразувате низ, съдържащ дата и час, в стойност TIME в SQL Server.
Трябва да преобразуваме низ, съдържащ име, дата и час от седмицата в стойност TIME.
Решение 1:
Ще използваме PARSE()
функция. Ето заявката, която бихте написали:
SELECT PARSE('Sunday, 2 February 2020 11:23:11.1134505' AS TIME ) AS time_value;
Ето резултата:
11:23:11.1134505
Дискусия:
Използвайте PARSE()
функция за преобразуване на низ, съдържащ име, дата и час от седмицата в типа данни TIME. Тази функция приема низа за преобразуване, ключовата дума AS и нов тип данни (в нашия пример TIME
). Низът трябва да съдържа стойност, която представлява този тип данни. В нашия пример низът 'February 2, 2020 11:23:11.1134505'
съхранява времева стойност.
Забележете, че часът е само част от този низ, който също съдържа името на деня от седмицата. Не използвайте CONVERT()
или CAST()
функции в този случай; те също връщат тип данни TIME, но без деня от седмицата.
Ако използвате говорим език, който е различен от езика на сървъра, включете ключовата дума USING и съответния код на култура. За полски език бихте написали:
SELECT PARSE('Niedziela, 2 lutego 2020 11:23:11.1134505' AS TIME USING 'pl-PL' ) AS time_value;
За повече информация относно стойностите на параметрите на културата вижте официалната документация на SQL Server.
В този случай трябва да използвате PARSE()
функция, въпреки че не е с най-добра производителност. Ако работите с низ, представляващ стойност за време, която не съхранявайте допълнителни данни (като името на деня от седмицата), използвайте CASE()
функция. Ето един пример.
Решение 2:
SELECT CAST('2 February 2020 11:23:11.1134505' AS TIME ) AS time_value;
Ето резултата:
11:23:11.1134505
Низът, съдържащ датата и часа за преобразуване, трябва да бъде във формата на типа данни за дата и час в T-SQL. Можете да прочетете повече в документацията на SQL Server.
CAST()
функцията е стандарт ANSI SQL и нейната производителност е по-добра от CONVERT()
или PARSE()
.
И накрая, можете също да използвате CONVERT()
функция. Вижте следващия пример.
Решение 3:
SELECT CONVERT(TIME, '2 Feb, 2020 11:23:11.1134505') AS time_value;
Резултатът:
11:23:11.1134505
CONVERT()
функцията приема три аргумента:новия тип данни, низа за преобразуване и (по избор) желания формат. Въпреки това, трябва да използвате тази функция само ако трябва да посочите как трябва да бъдат форматирани данните за дата и час, тъй като нейната производителност не е толкова добра, колкото CAST()
.