Я написал простой запрос на выбор, чтобы выбрать одну строку из таблицы, используя поле с именем «Имя». Имена являются последовательными и представлены как «RM001», «RM002», «RM003»…. Эта проблема заключалась в том, что он не получил «RM004» со следующим запросом
-- Trim Name Field
UPDATE [dbo].[RoutineMaintenanceTask] SET = LTRIM(RTRIM([dbo].[RoutineMaintenanceTask].Name));
-- Select the record
SELECT *
FROM [dbo].[RoutineMaintenanceTask]
WHERE Name = 'RM004'
Когда я проверял длину значения с помощью следующего запроса, он показывал мне длину как 7
-- Check the length
select (Name), len(Name) AS TextLength
from [dbo].[RoutineMaintenanceTask]
where Name = 'RM004'
Очевидно, что это имя содержит некоторые символы до или после, но это не пробел.
Мало того, я проверил значение в отладчике Visual Studio и не заметил ничего необычного.
Тем не менее, когда я скопировал значение «Имя» из области результатов SQL и скопировал его в notepad ++ со специальными символами, я смог это увидеть.
В конечном итоге мне удалось решить эту проблему, добавив следующий код перед оператором выбора
-- Remove the tail
UPDATE [dbo].[RoutineMaintenanceTask] SET Name = substring(Name,1,5);
Мне просто нужно знать, как узнать, что такое скрытые символы в подобном случае, и как устранить их без использования подстроки (потому что в этом случае это было легко, потому что я знал длину).
PS. Я понимаю, что использование ключевого слова 'name' в качестве поля таблицы не является хорошей практикой, но в этом контексте это не имеет никакого отношения.