2009-10-20 3 views
3

Это данные в таблице TB_USERDB2 автоматической обрезки хвостовых пробелов

USER_USERID  
--------------  
A111   
A9999   
ADMIN   
AHO    
AHO2   
AHO3   
AHO4  

... и схема TB_USER таблицы

COLUMN_NAME   DATA_TYPE DATA_LENGTH 
-------------------- --------- ----------- 
USER_USERID   VARCHAR 15   

Когда я выполнить следующие ЗЕЬЕСТ:

SELECT USER_USERID FROM TB_USER WHERE USER_USERID = 'ADMIN ' 

... и:

SELECT USER_USERID FROM TB_USER WHERE USER_USERID = 'ADMIN' 

DB2 извлечь такой же вывод следующий

USER_USERID  
-------------- 
ADMIN 

Как исправить эту проблему?

+0

14 вопросов & никто принимаются ... –

ответ

3

Такое поведение как задумано - равенство предикаты для сравнения строк не будет рассматривать конечные пробелы. Как предложил Ракеш, предикат LIKE будет рассматривать конечные пробелы. Это зависит от вашего варианта использования, с которым вам следует идти.

Соответствующая документация:

DB2 9.7 Infocenter - Assignments and comparisons

"При сравнении символьных строк разной длины, то сравнение производится с использованием логической копии более короткой строки, которая дополняется справа с пробелами, достаточных для удлините его длину до длины более длинной строки. Это логическое расширение выполняется для всех символов, включая те, которые помечены как FOR BIT DATA. «

DB2 9.7 Infocenter - LIKE predicate

«Предикат LIKE ищет строки, имеющие определенный шаблон. Шаблон задается строкой, в которой знак подчеркивания и знак процента могут иметь особые значения. Зацепляющие пробелы в шаблоне являются частью шаблона. "

1

Вместо

SELECT USER_USERID FROM TB_USER WHERE USER_USERID = 'ADMIN ' 

Использование

SELECT USER_USERID FROM TB_USER WHERE USER_USERID like 'ADMIN ' 
4

Вы должны использовать RTRIM или TRIM функции.

SELECT USER_USERID FROM TB_USER WHERE RTRIM(USER_USERID) = 'ADMIN' 

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

  • Нет связанных вопросов^_^