Друк цілочисельної змінної та рядка в одному рядку в SQL


81

Гаразд, я шукав відповідь на це в Technet, але безрезультатно.

Я просто хочу надрукувати цілу змінну, об'єднану двома змінними рядка.

Це мій код, який не працює:

print 'There are ' + @Number + ' alias combinations did not match a record'

Здається, така основна функція, я не міг уявити, що це неможливо в T-SQL. Але якщо це неможливо, просто скажіть. Я не можу знайти прямої відповіді.


2
print 'There are ' + CAST(@Number AS NVARCHAR(100)) + ' alias combinations did not match a record'
поташин

Відповіді:


133
declare @x INT = 1 /* Declares an integer variable named "x" with the value of 1 */
    
PRINT 'There are ' + CAST(@x AS VARCHAR) + ' alias combinations did not match a record' /* Prints a string concatenated with x casted as a varchar */

Мені подобається акторський метод. Короткий і солодкий, і зберігає вихідну змінну як int, що мені потрібно.

Ха, я би прийняв це негайно, але це не дозволило б мені ще 6 хвилин.

8

Числа мають вищий пріоритет, ніж рядки, тому, звичайно, +оператори хочуть перетворити ваші рядки в числа перед додаванням.

Ви можете зробити:

print 'There are ' + CONVERT(varchar(10),@Number) +
      ' alias combinations did not match a record'

або використовувати (досить обмежені) засоби форматування RAISERROR:

RAISERROR('There are %i alias combinations did not match a record',10,1,@Number)
WITH NOWAIT

Дякуємо за довідкову інформацію. Я не розумів, що T-SQL так багато думав, що має перевагу при виконанні простих операторів друку.

1
@AdamJ - це нічого спільного з printвисловлюваннями, як таке. T-SQL - це дуже проста, досить старомодна мова. У T-SQL усі входи для оператора повинні бути одного типу.
Damien_The_Unbeliever

Дякую! Здається, я іноді забуваю, що SQL був створений у 70-х. SQL Server має досить витончений вигляд (на мій погляд), що, на мою думку, робить його більш сучасним, ніж є насправді.

3

Ви не можете поєднати рядок символів і числовий рядок. Вам потрібно перетворити число в рядок, використовуючи CONVERT або CAST.

Наприклад:

print 'There are ' + cast(@Number as varchar) + ' alias combinations did not match a record'

або

print 'There are ' + convert(varchar,@Number) + ' alias combinations did not match a record'

2

Перевірте, чи встановлено початкове значення для друку int та десяткових значень.

Цей зразок друкує порожній рядок

declare @Number INT
print 'The number is : ' + CONVERT(VARCHAR, @Number)

І цей зразок друкується -> Номер: 1

declare @Number INT = 1
print 'The number is : ' + CONVERT(VARCHAR, @Number)

1

Ви можете спробувати цей,

declare @Number INT = 5                            
print 'There are ' + CONVERT(VARCHAR, @Number) + ' alias combinations did not match a record'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.