Я пытаюсь выполнить поиск таблицы на основе конкатенации столбцови lastName
. Оба они определены как NVARCHAR(50) NOT NULL
LEN (firstName) + LEN (lastName) не равно LEN (firstName + lastName)
Иногда запрос не находит совпадения, поскольку в конкатенированном столбце добавляются дополнительные пробелы. Вот запрос:
SELECT firstName + lastName AS fullName, LEN(firstName) + LEN(lastName) AS realLength, LEN(firstName + lastName) AS concatLength FROM UsersTable
А вот изображение с результатами:
Что такое сделка с этим? Как я могу избежать лишних пробелов? Если я делаю SELECT RTRIM(firstName) + RTRIM(lastName) ...
, я получаю правильное полное имя без лишних пробелов, но использование RTRIM
слишком дорого, потому что мой набор данных очень большой. Это привело бы меня к мысли, что проблема заключается в самих данных, за исключением того, что LEN(firstName)
- это то же самое, что и LEN(RTRIM(firstName))
Если хранилище не вызывает беспокойства, почему бы не сохранить значение, которое вы ищете, в качестве собственного вычисленного столбца? –
Когда вы добавите 2 значения varchar вместе, вы получите правильные заполненные пробелы. Проблема не в вашем коде, это в ваших данных. Что бы ни было правильным дополнением, ваши проблемы с varchars являются проблемой. –
Я просто попробовал ваш запрос на большом наборе данных и дал правильные ответы. Посмотрите на свой скриншот; в столбце 'fullName' отображается имя и пустые пробелы. Проблема заключается в ваших данных, а не в запросе. Уверен, что ваши столбцы имен (или были когда-то) 'VarChar', а не' NVarChar'. –