2016-08-29 5 views
1

varchar필드에 숫자 데이터를 일반 삽입 할 때 나는 그다지 따르지 않습니다. 왼쪽 공백으로 두 칸을 채 웁니다. varchar는 공백을 없애기로되어 있지 않습니다 (오름차순 ... 그러나 공백으로 "프론트 패드"를 사용하는 규칙은 어디에 있습니까?). 2 선행 공백Teradata SQL VARCHAR 및 공백

다음 (,1243444,3455435,8768810,'fdff',5,7,8,,)
INSERT INTO v VALUES (,1243444,3455435,8768810,'fdff',5,7,8,,) 

하는 이유 다음 패드는 (2 spaces aka ' '

두번째 질문에 대한 20202020 진수보다 보면 (someirrelvant_datatype,varchar(x),varchar(y),varchar(z),char(5),smallint,int,int,Timestamp)

그래서 데이터 그래서이

SEL  CHAR2HEXINT (colA) ,colA FROM v 


313732353732 172572 /* this is some other pre-existing value*/ 
2020202033343535343335  3455435 /* this is value just inserted */ 

모양입니다 위와 같은 상황이 지속되지 않음)
여기서이

HMSA 
232434343 
HMSA 
4343434343 
434343434 

HMSA 363,210 등이 또한 I는 VARCHAR 데이터가 (50) COL 후행 2020 HEX 공간을 갖고 있지만, 다른 값 trailing spaces 없다. 무슨 일인지 잘 모르겠다. 이제 여기에 후행 공백을 모두 버리면 안되는 varchar입니까? 데이터가 어떻게 도착했는지 HMSA<space> 확실하지 않습니다. 어떤 아이디어?

좋아, 그래서이에서 오는 약간의 기이 볼 수 있습니다 :

insert ('yada ') into tb /* tb is volatile & SET.There are 4 spaces */ 
insert ('yada') into tb 

Query Failed. 2802: Duplicate row error in tb 

좋아 볼이 모습

7961646120202020 yada /*There are 4 spaces - 20 x 4 */ 


그래서 2 삽입에이 공간의 비교 부분을 던졌다 좋아하고 않았다 trim(oldvalue) vs trim (new value)

답변

3

Q1 : SELECT FORMAT(3455435), TYPE(3455435)을 실행하면 -(10)9이됩니다.

모든 데이터 유형에는 항상 문자열과의 주조에 사용되는 Cobol 스타일 형식이 있습니다. 귀하의 경우 소스와 대상의 데이터 유형이 일치하지 않으며 Teradata가 자동 유형 캐스트를 수행했습니다. 정수 형식은 최대 10 자리 숫자 + 의 오른쪽 부호입니다.

표준 SQL CAST을 사용하는 Explosit 형식 캐스트는 형식을 적용하지 않으므로 선행 공백이 적용되지 않습니다. 그래서 단순히 CAST(3455435 AS VARCHAR(20) 또는 (TRIM (3455435)를 할`대신

Q2 :.이 포함 된 VARCHAR 저장 당신은 삽입 정확하게, 즉 '1234 '는이 공백을 포함하여 저장 및 문자열을 비교할 때 무시됩니다 후행 공백을 표준 SQL 비교 규칙을 기반으로합니다. 따라서 'yada ''yada'은 같은 것으로 간주됩니다 (이 경우에는 표준 SQL을 따르지 않는 Oracle을 사용했을 것입니다).

+0

감사합니다. Dieter는 항상 설명과 훌륭한 뉴스를 제공합니다. db 세계에서 일어나는 많은 일반적인 장소 것들. 많은 사람들이이 가치있는 q & – user1874594

관련 문제