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

6 начина за свързване на низ и число в SQL Server

Ако някога сте се опитвали да свържете низ с число, докато използвате SQL Server, но сте получили грешка, тази статия трябва да ви изясни нещата. Има повече от един начин за извършване на конкатенация с помощта на T-SQL в SQL Server и ако обединявате различни типове данни (като низ и число), тогава може да получите грешка, в зависимост от това как правите конкатенацията.

Нещото, което трябва да запомните, когато обединявате различни типове данни, е, че те първо трябва да бъдат преобразувани в един и същ тип данни. По-конкретно, когато конкатенира низ с число, числото ще трябва да бъде преобразувано в низ, преди да може да бъде свързано с низа. За щастие SQL Server/T-SQL прави това лесно.

Тази статия представя шест начина за свързване на низове с числа с помощта на T-SQL.

Функцията CONCAT()

Най-очевидният (и вероятно най-добрият) начин за свързване на низ и число е да използвате CONCAT() функция. Това ви позволява да предоставите низа и числото като два отделни аргумента. След това SQL Server ще ги конкатенира и вашата конкатенация е завършена.

Пример

SELECT CONCAT('Comments: ', 9) AS Result;

Резултат:

Result     
-----------
Comments: 9

Както можете да видите, това работи перфектно. Низът и числото се представят като едно поле.

Имайте предвид, че не сте ограничени само до един низ и едно число – CONCAT() функцията може да приеме до 254 аргумента (т.е. можете да обедините до 254 низа/числа заедно.

Също така имайте предвид, че CONCAT() имплицитно преобразува всички аргументи в низови типове преди конкатенацията. Също така CONCAT() имплицитно преобразува всички нулеви стойности в празни низове.

Функцията CONCAT_WS()

Можем да вземем предишния пример още една стъпка, като използваме CONCAT_WS() функция. Тази функция ви позволява да посочите разделител.

За да предоставите разделител, просто го добавете като първи аргумент. След това посочете низа и числото като втори и трети аргумент.

SELECT CONCAT_WS(': ', 'Comments', 9) AS Result;

Резултат:

Result     
-----------
Comments: 9

Имайте предвид, че тази функция не е непременно подходяща за разделяне на двойки име/стойност, тъй като разделителят се добавя между всеки отделен елемент, който е конкатениран (така че ще бъде добавен и между всяка двойка, в случай че имате няколко двойки). В нашия случай работи добре, защото имаме само една двойка име/стойност, която да обединим.

Въпреки това винаги можете да вложите няколко CONCAT_WS() функции за връщане на правилната конкатенация за вашите нужди (така че да можете да имате различен разделител между всяка двойка).

Функцията CONVERT()

Ако по някаква причина не можете (или не искате) да използвате CONCAT() или CONCAT_WS() функции, можете да извършите конкатенация с помощта на оператора за конкатенация на низове (+ ). Когато използвате този метод, ще трябва да извършите всички преобразувания на типове данни ръчно.

Един от начините за преобразуване между типове данни е да използвате CONVERT() функция.

Ето как бихте направили това, като използвате същите данни от предишните примери:

SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;

Резултат:

Result     
-----------
Comments: 9

В този случай преобразувам цялото число във varchar(12), но това може да бъде всеки тип данни и дължина, които изисквате.

Функцията CAST()

CAST() функцията е много подобна на CONVERT() функция. Основната разлика е, че CAST() е стандартен ANSI и CONVERT() е специфичен за T-SQL. Като каза това, CONVERT() има някои допълнителни функции, но за целите на тези примери можете да използвате и двете.

Ето CAST() версия, използваща същите данни от предишните примери:

SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;

Резултат:

Result     
-----------
Comments: 9

Функцията TRY_CONVERT()

Един потенциален проблем при използване на CONVERT() функцията е, че ако преобразуването не успее, ще получите грешка. Въпреки че това е добре в много случаи, в някои случаи това може да не е желателно. В такива случаи може да намерите TRY_CONVERT() по-подходящ.

TRY_CONVERT() функцията преобразува типа данни точно както CONVERT() функция прави. Ако обаче данните не могат да бъдат преобразувани, те ще връщат null .

Например, ако се опитаме да направим следното, получаваме грешка:

SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;

Резултат:

Error: Arithmetic overflow error converting numeric to data type varchar.

Ако обаче използваме TRY_CONVERT() , получаваме null :

SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;

Резултат:

Result
------
null

В този случай можете да използвате условно програмиране, за да изпълните различна задача в зависимост от резултата.

Функцията TRY_CAST()

 TRY_CAST() функцията работи по същия начин. Той преобразува типа данни точно както CAST() функцията прави и ако данните не могат да бъдат преобразувани, тогава тя ще върне null .

Например това извежда грешка:

SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;

Резултат:

Error: Arithmetic overflow error converting numeric to data type varchar.

Но ако използваме TRY_CAST() вместо това получаваме null :

SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;

Резултат:

Result
------
null

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Елементите ORDER BY трябва да се появят в списъка за избор, ако изразът съдържа оператор UNION, INTERSECT или EXCEPT (SQL Server)

  2. Как да инсталирате SSMS

  3. Node.js MSSQL tedius ConnectionError:Неуспешно свързване към localhost:1433 - свържете ECONNREFUSED

  4. Как да активирате RPC Out с помощта на T-SQL

  5. Как да разделите низ в SQL Server