2017-10-05 3 views
0

Dies ist die dumme Frage, aber bitte helfen Sie mir aus der Schleife.SQL Vergleich der numerischen Zeichenfolge

SELECT * 

FROM TABLE_NAME T1 

WHERE '10000' > '2' 

Warum ist die obige Bedingung falsch? Ich weiß, ich kann es in Number umwandeln, aber ich weiß nicht, warum die obige Bedingung nicht wahr ist. Vielen Dank.

Antwort

2

Wenn Sie versuchen,

WHERE 'A' < 'B' 

es gibt Ihnen wahre

Wenn Sie versuchen,

WHERE 'AAAAAB' > 'AAAAAA' 

es gibt true zurück, da B größer als ein

ist

Aus dem gleichen Grund WHERE '10000' > '2' Rückgabe falsch

+0

Danke, aber dann nochmal. Warum '30000' <'2' ist FALSE. Ich denke, sie können den ersten Char vergleichen und dann den Rest ignorieren ??? –

+0

Es vergleicht das erste Zeichen von '3000', das 3 ist, mit dem ersten Zeichen von '2', das 2, jetzt 3 <2 gibt false zurück, weil der ASCII-Code von 2 kleiner als 3 ist – iamdeowanshi

2

Die Bedingung ist falsch, da die Werte als Zeichenfolgen, nicht Zahlen verglichen werden. Aus dem gleichen Grund:

WHERE 'A0000' > 'B' 

wird zu false ausgewertet.

Die Moral? Verwenden Sie nur einfache Anführungszeichen für String- und Datumskonstanten. Verwenden Sie keine einfachen Anführungszeichen für Zahlen.

+0

Vielen Dank für Ihre Antwort, aber ich habe eine weitere Frage. Warum gibt 'A0000' <'B' dann TRUE zurück? Ich möchte wissen, wie sie miteinander verglichen haben. –

+0

@ PhamNgocVinh. . . Weil der Vergleich alphabetisch ist, wie Einträge in einem Wörterbuch. –

1

Numerische Typen und Zeichenfolgen werden unterschiedlich behandelt.

Beispiel)

1 < 2 TRUE ist

'1000'>'2' FALSE ist

die Zeichenarten in einen numerischen Typ verglichen.

Verwendung 49 anstelle von '1' und 50 anstelle von '2'

Ergebnis 49 > 50 = FALSE

wenn '1000'> '1', TRUE ist

Siehe den ASCII-Code.

1

Denken Sie einfach. Wie es ist, haben Char-Typ Werte auf ASCII-System oder Charset-Kollation.

Nur zum Beispiel:

Declare @a char(1)='A',@b char(1)=B,@c char(1)='C' 

ein Wert ist 1 b-Wert ist 2 c-Wert 3

Es ist nur alphabetische Reihenfolge für char basierend Variablen auf SQL Server .

Das bedeutet, wenn Sie char, nchar, varchar oder nvarchar Werte vergleichen, überprüft zuerst Programm Wert Ihr erster Index, nach dann zweiter ... Bis zu diesem Ende.

Verwandte Themen