В SQL Server, CAST()
функция преобразува израз от един тип данни в друг.
Ето кратък преглед на функцията с примери.
Синтаксис
Синтаксисът е така:
CAST ( expression AS data_type [ ( length ) ] )
Където expression
е изразът за преобразуване, data_type
е новият тип данни и length
е незадължителна дължина за новия тип данни.
Пример
Ето пример за преобразуване на низ като десетичен знак:
SELECT CAST('007' AS DECIMAL(5,2));
Резултат:
7.00
Низ до дата
Ето пример за прехвърляне на низ към дата:
SELECT CAST('09 Feb 2030' AS date);
Резултат:
2030-02-09
В този случай CAST()
функцията успя да определи кои са кои части от датата, защото предоставих датата във формат, който тя разпознава.
Предаването на стойност, която не може да бъде прехвърлена като дата, води до грешка:
SELECT CAST('Next Xmas' AS date);
Резултат:
Msg 241, Level 16, State 1, Line 1 Conversion failed when converting date and/or time from character string.
Locale
Езикът на текущата сесия може да промени начина, по който датите се тълкуват.
Ето какво се случва при използване на британски език:
SET LANGUAGE British;
SELECT CAST('09/02/2030' AS date);
Резултат:
2030-02-09
В този случай датата се тълкува като деветия ден на февруари.
Нека променим езика на us_English
:
SET LANGUAGE us_English;
SELECT CAST('09/02/2030' AS date);
Резултат:
2030-09-02
Този път тя интерпретира датата като втори ден на септември.
Конкатенация на низове
Ето пример за прехвърляне на числова стойност към низ, за да се конкатенира стойността с низ:
SELECT 'Likes: ' + CAST(178 AS VARCHAR(10));
Резултат:
Likes: 178
Ето какво се случва, ако не го пуснем:
SELECT 'Likes: ' + 178;
Резултат:
Msg 245, Level 16, State 1, Line 1 Conversion failed when converting the varchar value 'Likes: ' to data type int.
Когато се опитва да конкатенира две стойности с различни типове данни, SQL Server трябва имплицитно да преобразува една от стойностите, за да използва типа данни на другата, така че и двете да са от един и същ тип данни, преди да може да извърши конкатенацията. Това преобразуване следва правилата за приоритет на типа данни.
В SQL Server, INT
типът данни има по-висок приоритет от VARCHAR
.
Следователно в горния пример SQL Server се опитва да преобразува низа в цяло число. Но това се проваля, защото низът не може да бъде преобразуван в цяло число.
Отрязване на текст
Един удобен малък трик, който можем да изпълним с CAST()
функцията е да съкрати по-дългите низове до по-четлива дължина.
Ето пример за съкращаване на текст, избран от таблица на база данни:
SELECT
ProductName,
CAST(ProductName AS VARCHAR(20)) 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 | +---------------------------------+----------------------+
Повече информация
CAST()
функцията работи по подобен начин на CONVERT()
функция и много преобразувания на данни могат да бъдат извършени с помощта на която и да е от тях. Въпреки това има разлики между тях.
Вижте документацията на Microsoft за CAST()
и CONVERT()
за по-подробна информация относно използването на тази функция.