2015-06-09 2 views
2

Я весь день разбираюсь с кодом t-sql для поиска почтового индекса. Я использую wild card для соответствия концу строки. Однако он не работает. Он работает только тогда, когда вся строка введена правильно.T SQL-подстановочный знак для почтового индекса

Вот код, который у меня есть.

IF (@MailFiveDigitZip <> '') 
      BEGIN 
       SET @Conditions = @Conditions + ' AND (cast(MailFiveDigitZip AS Varchar(5)) LIKE cast(@MailFiveDigitZip AS Varchar(5)) + ''%'')' 
     END; 

@MailFiveDigitZip - это параметр, и это символ (5). Он добавляется к переменной, которая содержит несколько условий поиска. У меня есть другой код, похожий на это, на самом деле идентичный, за исключением другого кода, имеет индекс zip, который является nullable int, и поэтому условия if: @zipCode не равно null. Тем не менее, мой другой код работает и возвращает значения даже для входных данных, таких как «44» и «543», он делает то, что предполагает дикая карта, и находит все строки, начинающиеся с входного значения.

Любая помощь или предложения будут оценены.

+0

FYI - почтовые индексы не должны храниться как ints, так как существуют почтовые индексы, начинающиеся с 0 – Kritner

+0

- это sql-сервер? Он выглядит sql-servery - вы должны пометить вопрос соответствующими RDBMs – Kritner

+0

Почему вы не добавляете содержимое переменной в динамическое состояние как литерал? –

ответ

0

Если вы сказали, что это @MailFiveDigitZip, это char, а не varchar, то вы столкнулись с проблемами заполнения символов.

"44" в varchar(5) является "44"

"44" в char(5) является "44" (примечание в случае, если он не переводит хорошо ... это 44 плюс 3 пробела)

как "44%" не соответствует вашим критериям запроса.

Чтобы это исправить, просто обновить свою переменную @MailFiveDigitZip от char(5) к varchar(5)

+0

Да, это действительно моя проблема, есть завершающие пробелы в конце @MailFiveDigitZip, если введено значение менее 5 символов. Я решил эту проблему, используя RTRIM. – ktconrad90

Смежные вопросы