2012-09-25 7 views
1

DB2와 Oracle은 짧은 문자열을 오른쪽 공백으로 채워서 문자 비교를 구현합니다. 하지만 왜?SQL - 문자를 비교할 때 패드 공백이 필요한 이유는 무엇입니까?

데이터베이스 엔진이 더 짧은 문자를 공백으로 채우는 대신 더 큰 문자 값을 잘라낸 것이 좋지 않을까요? 즉 내 쿼리가 SELECT * from SOME_TABLE where CUSTOMER_NAME = 'Popeye ' 경우는, 데이터베이스 엔진이이 값이 여기 즉 또한 'Popeye '

을 통과 손질 한 수있을 때 대신, SOME_TABLE의 모든 행에 공간을 추가 끝, 이해하기 그냥 궁금해서 왜 오라클과 DB2는 추가 않습니다 오른쪽에 공백이 있습니까?

+3

오른쪽에 공백을 추가하는 것이 RDBMS 엔진이 아닌 유형의 속성이라고 생각합니다. 'char (10)'열을 선언하면 더 짧은 문자열에 공백이 추가되어 10 자 길이가됩니다. 대신'varchar2 (10)'열을 선언하면 패딩이 발생하지 않습니다. – dasblinkenlight

답변

3

다른 유형의 문자와 현재 상황을 혼동스럽게합니다. 실행시 :

SELECT * from SOME_TABLE where CUSTOMER_NAME = 'Popeye ' 

"SOME_TABLE의 모든 행에"공백이 추가되지 않습니다. 유일한 질문은 결과의 너비입니다. 이 너비는 WHERE 절에 나타나는 것이 아닌 SOME_TABLE의 열 속성으로 설정됩니다.

CUSTOMER_NAME이 (가) char (x) 값으로 선언 된 경우 문자열의 길이는 해당 문자 여야합니다. 말해, 그것은 char(10)이고 당신은 그것에 '뽀빠이'를 지정합니다. 이 값은 6 자이며, 여하튼 10을 채워야합니다. SQL 표준은 오른쪽에 패드를 두어 값을 'Popeye '으로 만듭니다.

가변 길이 문자열이 필요하면 varchar 또는 varchar2를 사용하십시오.

관련 문제