2016-08-29 10 views
1

Ich nicht ganz folgen, wenn ich eine einfache Einfügung von numerischen Daten in ein Varchar Feld warum tut es links Pad es mit 2 Leerzeichen. Ist nicht Varchar soll Leerzeichen abschneiden (Nachlauf ok ... aber wo ist die Regel, dass Sie "Frontpad" mit Leerzeichen). Warum dann Pad mit 2 führenden LeerzeichenTeradata SQL VARCHAR und Leerzeichen

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

Hier (,1243444,3455435,8768810,'fdff',5,7,8,,) sind (someirrelvant_datatype,varchar(x),varchar(y),varchar(z),char(5),smallint,int,int,Timestamp)

So Daten wie dieser So

SEL  CHAR2HEXINT (colA) ,colA FROM v 


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

sehen, wenn Sie oben 20202020 Hex sehen für 2 spaces aka ' '

2.e Frage (nicht Fortsetzung der obigen Situation)
Auch ich habe Daten für eine varchar (50) col wie diese

HMSA 
232434343 
HMSA 
4343434343 
434343434 

Hier ist der HMSA hat ein Leerzeichen 2020 HEX aber auch andere Werte haben nicht trailing spaces. Ich bin mir nicht sicher, was los ist. Jetzt ist hier nicht varchar sollen alle nachgestellten Leerzeichen wegwerfen? Wie kommen Daten mit HMSA<space> gelandet Nicht sicher. Irgendwelche Ideen ?

Ok lässt so auf einige Merkwürdigkeiten sehen aus kommenden:

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

Query Failed. 2802: Duplicate row error in tb 

Alles klar zu sehen, was das sieht aus wie

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

So auf dem zweiten Einsatz den Raum Vergleichsteil abwarf und Hat ein trim(oldvalue) vs trim (new value)

Antwort

3

Q1: Wenn Sie eine SELECT FORMAT(3455435), TYPE(3455435) ausführen, erhalten Sie INTEGER

Jeder Datentyp hat immer ein Cobol-ähnliches Format, das für die Umwandlung in und aus einer Zeichenfolge verwendet wird. In Ihrem Fall stimmen die Datentypen von Quelle und Ziel nicht überein und Teradata hat eine automatische Typumwandlung durchgeführt. Das Format einer Ganzzahl besteht aus bis zu zehn Ziffern plus einem Vorzeichen rechtsbündig.

Explixit-Typ, der mit Standard-SQL CAST umgewandelt wird, wendet kein Format und somit keine führenden Leerzeichen an. So tun einfach CAST(3455435 AS VARCHAR(20) oder (TRIM (3.455.435) `statt

Q2: a. VarChar speichert genau das, was legen Sie, dh '1234 ' wird mit zwei Räumen gelagert werden und basieren auf Standard-SQL-Vergleichsregeln Leerzeichen ignoriert werden, wenn Zeichenketten zu vergleichen. , also 'yada ' und 'yada' werden als gleich betrachtet (Sie haben wahrscheinlich mit Oracle gearbeitet, das in diesem Fall nicht Standard SQL folgt).

+0

Danke .... Dieter wie immer, eine wunderbare Erklärung und 'neue Nachrichten' auf so Es passieren viele alltägliche Dinge in der db-Welt, und hoffentlich werden viele diesen wertvollen q & a nützlich finden – user1874594

Verwandte Themen