Сравните две строки с завершающей «пустой» строкой

#sql #sql-server #tsql #inner-join #trim

Вопрос:

Я пытаюсь сравнить две таблицы (Текущее программное обеспечение, Рекомендуемое программное обеспечение), которые чреваты завершающими строками «пустое разное» в большинстве сравниваемых записей. По какой-то причине я не могу изменить или удалить завершающие невидимые пробелы или пустые символы в сравниваемых полях в SQL server (если только я не делаю что-то неправильно).

Я даже попытался экспортировать произведенные записи таблиц в MS excel, вручную удалив конечные пустые строки, физически удалив их с помощью клавиши удаления и обновив таблицы. Не повезло и совершенно сбит с толку. Поэтому я решил, что запрос, возможно, «ОБРЕЗАЕТ» сравниваемые записи на лету.

Вопрос: Есть ли способ, которым я могу просто изменить следующий запрос для сравнения двух таблиц без завершающих пустых строк в обеих записях SQL?

Это и есть запрос

 SELECT        dbo.VIEW_CURRENT_SOFTWARE_BYVER.SRV_ID_SSI, dbo.VIEW_CURRENT_SOFTWARE_BYVER.SRV_MACID, dbo.VIEW_CURRENT_SOFTWARE_BYVER.SRV_DN, dbo.VIEW_CURRENT_SOFTWARE_BYVER.DISPLAYNAME, 
                         dbo.VIEW_CURRENT_SOFTWARE_BYVER.DISPLAYVERSION, dbo.VIEW_CURRENT_SOFTWARE_BYVER.VALOVERRIDE, dbo.VIEW_RECOMMENDED_SOFTWARE_BYVER.SRV_UPDATEDVERSION, 
                         CASE WHEN [VIEW_CURRENT_SOFTWARE_BYVER].[DISPLAYVERSION] = '' AND 
                         [VIEW_RECOMMENDED_SOFTWARE_BYVER].[SRV_UPDATEDVERSION] = '' THEN 'No Version Available' WHEN [VIEW_CURRENT_SOFTWARE_BYVER].[DISPLAYVERSION] IS NOT NULL AND 
                         [VIEW_RECOMMENDED_SOFTWARE_BYVER].[SRV_UPDATEDVERSION] IS NULL 
                         THEN 'Evaluation Required' WHEN [VIEW_CURRENT_SOFTWARE_BYVER].[DISPLAYVERSION] = [VIEW_RECOMMENDED_SOFTWARE_BYVER].[SRV_UPDATEDVERSION] THEN 'Current' WHEN [VIEW_CURRENT_SOFTWARE_BYVER].[DISPLAYVERSION]
                          != [VIEW_RECOMMENDED_SOFTWARE_BYVER].[SRV_UPDATEDVERSION] THEN 'Requires Update' ELSE 'Error' END AS SRV_RECOMMENDATION, dbo.VIEW_CURRENT_SOFTWARE_BYVER.RELEASE, 
                         dbo.VIEW_CURRENT_SOFTWARE_BYVER.PUBLISHER, dbo.VIEW_CURRENT_SOFTWARE_BYVER.INSTALLDATE
FROM            dbo.VIEW_CURRENT_SOFTWARE_BYVER LEFT OUTER JOIN
                         dbo.VIEW_RECOMMENDED_SOFTWARE_BYVER ON dbo.VIEW_CURRENT_SOFTWARE_BYVER.DISPLAYNAME = dbo.VIEW_RECOMMENDED_SOFTWARE_BYVER.SRV_CMBNAME
GO
 

Где

Поля VIEW_CURRENT_SOFTWARE_BYVER.DISPLAYNAME (varchar(max)) и VIEW_RECOMMENDED_SOFTWARE_BYVER.SRV_CMBNAME (char(215)) содержат раздражающие конечные пустые строки, из-за которых они неправильно сочетаются в запросе.

введите описание изображения здесь

Заранее спасибо

Комментарии:

1. Каков тип данных SRV_CMBNAME … varchar или char ?

2. Вы уверены, что это космические персонажи? Если они выводятся из какой-либо системы инвентаризации программного обеспечения, они вполне могут включать встроенные символы возврата каретки (0x0d) или ввода строки (0x0a). Попробуйте cast(... as varbinary(max)) использовать одно из проблемных полей и посмотрите, все ли в нем пробелы (0x20) в конце.

3. символ(x) зарезервирует конечные пробелы. Просто для удовольствия попробуйте выбрать конвертировать(символ(10),'[‘) ‘]’ В то время как varchar(n) будет обрезать конечные пробелы

4. @JohnCappelletti о, я понимаю.. хорошо, позвольте мне еще раз попробовать эту меру ОБРЕЗКИ … и посмотреть, сработает ли она!

5. @JohnCappelletti вместо того, чтобы пытаться заменить это в n-й степени.. Я удалил все затронутые таблицы и просто перенес свои таблицы со всеми исправлениями.. больше никаких начальных или конечных пробелов или других символов.. мой запрос все еще нарушен, но, по крайней мере, больше никаких раздражающих трейлеров.. Я продолжу исследовать, почему я не делаю четкого соответствия между моими колонками. Еще раз спасибо.

Ответ №1:

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