В SQL Server, CONVERT()
функция преобразува израз от един тип данни в друг.
Ето кратък преглед на функцията с примери.
Синтаксис
Синтаксисът е така:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Където expression
е изразът за преобразуване, data_type
е новият тип данни и length
е незадължителна дължина за новия тип данни.
Незадължителният style
Аргументът може да се използва за определяне как функцията трябва да преведе expression
аргумент. Например, можете да използвате този аргумент, за да посочите формата на датата.
Пример
Ето пример за преобразуване на низ в десетичен:
SELECT CONVERT(DECIMAL(5,2), '007');
Резултат:
7.00
Низ до дата
Ето пример за прехвърляне на низ към дата:
SELECT CONVERT(date, '09 Feb 2030');
Резултат:
2030-02-09
В този случай CONVERT()
функцията успя да определи кои са кои части от датата, защото предоставих датата във формат, който тя разпознава.
Предаването на стойност, която не може да бъде прехвърлена като дата, води до грешка:
SELECT CONVERT(date, 'My Birthday');
Резултат:
Msg 241, Level 16, State 1, Line 1 Conversion failed when converting date and/or time from character string.
Locale
Езикът на текущата сесия може да промени начина, по който датите се тълкуват.
Ето какво се случва при използване на британски език:
SET LANGUAGE British;
SELECT CONVERT(date, '09/02/2030');
Резултат:
2030-02-09
В този случай датата се тълкува като деветия ден на февруари.
Нека променим езика на us_English
:
SET LANGUAGE us_English;
SELECT CONVERT(date, '09/02/2030');
Резултат:
2030-09-02
Този път тя интерпретира датата като втори ден на септември.
style
Аргумент
Можем да използваме незадължителния style
аргумент, за да посочите как трябва да бъде преведен изразът.
Пример:
SET LANGUAGE British;
SELECT
CONVERT(date, '09/02/2030') AS "British",
CONVERT(date, '09/02/2030', 101) AS "US",
CONVERT(date, '09/02/30', 1) AS "US (short)",
CONVERT(date, '20300902', 112) AS "ISO",
CONVERT(date, '09.02.2030', 104) AS "German";
Резултат:
+------------+------------+--------------+------------+------------+ | British | US | US (short) | ISO | German | |------------+------------+--------------+------------+------------| | 2030-02-09 | 2030-09-02 | 2030-09-02 | 2030-09-02 | 2030-02-09 | +------------+------------+--------------+------------+------------+
Конкатенация на низове
Ето пример за прехвърляне на числова стойност към низ, за да се конкатенира стойността с низ:
SELECT 'Age: ' + CONVERT(varchar(10), 27);
Резултат:
Age: 27
Ето какво се случва, ако първо не го преобразуваме:
SELECT 'Age: ' + 27;
Резултат:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Age: ' to data type int.
Когато се опитва да конкатенира две стойности с различни типове данни, SQL Server трябва имплицитно да преобразува една от стойностите, за да използва типа данни на другата, така че и двете да са от един и същ тип данни, преди да може да извърши конкатенацията. Това преобразуване следва правилата за приоритет на типа данни.
В SQL Server, int
типът данни има по-висок приоритет от varchar
.
Следователно в горния пример SQL Server се опитва да преобразува низа в цяло число, но това се проваля, защото низът не може да бъде преобразуван в цяло число.
Отрязване на текст
Един удобен малък трик, който можем да изпълним с CONVERT()
функцията е да съкрати по-дългите низове до по-четлива дължина.
Ето пример за съкращаване на текст, избран от таблица на база данни:
SELECT
ProductName,
CONVERT(varchar(20), ProductName) AS Truncated
FROM Products;
Резултат:
+---------------------------------+----------------------+ | ProductName | Truncated | |---------------------------------+----------------------| | Left handed screwdriver | Left handed screwdri | | Long Weight (blue) | Long Weight (blue) | | Long Weight (green) | Long Weight (green) | | Sledge Hammer | Sledge Hammer | | Chainsaw | Chainsaw | | Straw Dog Box | Straw Dog Box | | Bottomless Coffee Mugs (4 Pack) | Bottomless Coffee Mu | | Right handed screwdriver | Right handed screwdr | +---------------------------------+----------------------+
Повече информация
CONVERT()
функцията работи по подобен начин на CAST()
функция и много преобразувания на данни могат да бъдат извършени с помощта на която и да е от тях. Въпреки това има разлики между тях.
Вижте документацията на Microsoft за CAST()
и CONVERT()
за по-подробна информация относно използването на тази функция.