Объедините и добавьте символ в целочисленные столбцы в SQL - PullRequest
0 голосов
/ 20 июня 2020

У меня есть 10 значений длины символов в столбце на SQL сервере. Мне нужно разделить этот столбец на фиксированную длину, удалить ведущие нули и добавить - после каждого значения. Я могу разбить значения, используя Substring и преобразовав их в int. Он работает хорошо.

Однако, когда я пытаюсь объединить, это терпит неудачу. Цените, если вы можете помочь.

SELECT TOP 1 R.COL1, CAST(SUBSTRING(R.COL1,1,1) AS int) AS F1,CAST(SUBSTRING(R.COL1,2,5) AS int) AS F2,CAST(SUBSTRING(R.COL1,7,4) AS int) AS F3 CAST(SUBSTRING(R.COL1,1,1) AS int) +'-' +CAST(SUBSTRING(R.COL1,2,5) AS int)  +'-' + CAST(SUBSTRING(R.COL1,7,4) AS int) AS finalString  FROM MYTABLE R

Если значение для COL1 IS 1012950001, finalString, которого я ожидаю, будет 1-1295-1, однако результат, который я получаю из вышеуказанного запроса, составляет 1297, поскольку он добавляет все ценности. Цените, если можете помочь.

Ответы [ 2 ]

1 голос
/ 20 июня 2020

Вы не можете использовать оператор + с числовым типом данных и varchar, который не может неявно преобразовать в этот тип данных. Что-то вроде 1 + 'a' не будет работать, поскольку 'a' не является int и не может быть неявно преобразован в единицу.

Если вы смешиваете типы данных, используйте CONCAT, который неявно преобразует каждую часть в (n)varchar:

CONCAT({Numerical Expression},'a',{Other varchar Expression})
0 голосов
/ 20 июня 2020

Вы можете использовать метод concat для объединения значения подстроки

select 
concat(CAST(SUBSTRING('1012950001',1,1) AS int), '-', 
CAST(SUBSTRING('1012950001',2,5) AS int), '-', 
CAST(SUBSTRING('1012950001',7,4) AS int)) AS finalString

Это даст вам ожидаемый результат '1-1295-1'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...