2013-09-18 2 views
0

Я пытаюсь объединить два поля в SQL с помощью следующей команды;Ошибка при попытке запустить команду соединения в SQL

SELECT [NUM] & [ITEMNUM] AS LINKCODE 
FROM  mydatabase 

Когда я запускаю это, я получаю сообщение об ошибке;

Msg 245, Level 16, State 1, Line 1 
Conversion failed when converting the varchar value 'O00000001' to data type int. 

Это, вероятно, что-то просто, но я совершенно новый для SQL. Любая помощь будет оценена :)

Спасибо.

+0

В чем заключается намерение '[NUM] & [ITEMNUM]'? Вы пытаетесь объединить строки? '&' является [побитовым и] (http://technet.microsoft.com/en-us/library/ms174965.aspx). –

+0

какую базу данных вы используете? – StevieG

+3

JOIN is SQL имеет очень специфическое значение, которое очень отличается от того, как вы только что использовали слово. –

ответ

3

Вы не можете просто добавить число и строку вместе. Вы должны сначала перенести их на один и тот же тип данных. Транслировать на varchar первого

SELECT cast([NUM] as varchar) + [ITEMNUM] AS LINKCODE 
FROM mydatabase 
+0

Только если это SQL Server (вероятно, это связано с глупым [] и сообщением об ошибке), иначе «+» - это числовой оператор, а не строка concat :-) «&» - это БИТАНД, не так ли? ? – dnoeth

+0

Это отлично поработало, спасибо! – Paul

+0

Yup. Подробнее о приоритете SQL Server можно найти здесь: [link] (http://technet.microsoft.com/en-us/library/ms190309.aspx). Неявные преобразования возможны только снизу вверх. Если вы хотите конвертировать что-то сверху вниз, вы должны сделать это явно с помощью cast или convert. –

0

При объединении двух столбцов, которые могут быть нулевыми, общий результат может быть NULL, как это:

SELECT NULL + [Something] 

, результат которой, как NULL. Таким образом, ваш примеру нужен содержат некоторый метод обработки NULL:

SELECT 
    ISNULL(cast([NUM] as varchar), SPACE(0)) + ISNULL(CAST([ITEMNUM] as VARCHAR), SPACE(0)) AS LINKCODE 
FROM mydatabase 
1

Если вы на SQL Server 2012+ можно использовать

SELECT CONCAT([NUM],[ITEMNUM]) AS LINKCODE 
FROM mytable 

Это относится NULL, как пустая строка и делает отливку числовых значений нанизывать.

Смежные вопросы