Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как CAST() работи в SQL Server

В 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() за по-подробна информация относно използването на тази функция.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 3 начина да получите езика на текущата сесия в SQL Server (T-SQL)

  2. 2 начина да получите информация за дялове за таблица в SQL Server (T-SQL)

  3. Как да получите всички грешки на всички SSIS пакети в решение

  4. Промяна на функция с таблично значение в SQL Server

  5. Защо и кога LEFT JOIN с условие в клауза WHERE не е еквивалентно на същото LEFT JOIN в ON?