Проблема преобразования при использовании подстроки на SQL сервере - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь обновить значения столбца другими значениями столбца в той же таблице данных на основе некоторых условий (проверяет, имеет ли поле .pdf в конце). При обновлении значений столбцов мне нужно удалить .pdf, а затем назначить, используя SUBSTRING () для того же самого.

Update Table_name
Set col_1 = SUBSTRING(col_2, 1, LEN(col_2 - 4))
Where col_2 like '%.pdf%'

Но я получаю ошибку

Преобразование не удалось, когда преобразование значения nvarchar default.pdf в тип данных int

Примечание: col_1 и col_2 оба имеют тип nvarchar(255)

Ответы [ 2 ]

2 голосов
/ 05 апреля 2020

У вас есть синтаксическая ошибка при расчете LEN. LEN(col_2) - 4) вместо LEN(col_2 - 4):

SQL пытается преобразовать col_2 в INT, чтобы сначала вычислить col_2 - 4 перед применением функции LEN. Сначала получите LEN (col_2), который возвращает INT, а затем вычтите 2.

Решение:

UPDATE Table_name
   SET col_1 = SUBSTRING(col_2, 1, LEN(col_2) - 4)
 WHERE col_2 LIKE '%.pdf%'
0 голосов
/ 05 апреля 2020

Хотя в вашем коде есть небольшая синтаксическая ошибка. Это должно быть

SUBSTRING(col_2, 1, LEN(col_2) - 4) значение столбца, который будет обновлен.

Вы можете попробовать это также, используя функции charindex() и Reverse(), как показано ниже.

create table MyTable
(
  col_1 nvarchar(255)
  , col_2 nvarchar(255)
)

insert into MyTable values
(null, 'ABC.pdf'),(null, 'MNO.pdf'),(null, 'PQR.pdf')

select * from MyTable

UPDATE MyTable
SET col_1 = left([col_2], len([col_2]) - charindex('.', Reverse([col_2])))
WHERE col_2 LIKE '%.pdf%'

select * from MyTable

Live db <> fiddle demo.

...