2015-12-18 3 views
5

Der SQL-Befehl BETWEEN funktioniert nur, wenn ich ihm einen kleinen Bereich für die Spalte gebe. Hier ist, was ich meine:SQL BETWEEN Befehl funktioniert nicht für große Bereiche

Mein Code:

import AzureSQLHandler as sql 

database_layer = sql.AzureSQLHandler() 
RESULTS_TABLE_NAME = "aero2.ResultDataTable" 
where_string = " smog BETWEEN '4' AND '9'" 

print database_layer.select_data(RESULTS_TABLE_NAME, "*", where_string) 

die auf SQL-Befehl entspricht:

SELECT * 
FROM aero2.ResultDataTable 
BETWEEN '4.0' AND '9.0' 

und select_data gibt eine 2-D-Array alle diese Zeilen enthält.

Die Spalte, auf die ich hier verweise, hat bereits alle Werte gleich 5.0 gespeichert.

Das funktioniert FEIN!

Aber wenn ich den Bereich z. B. auf "4.0" UND "200.0" vergrößere, gibt es nichts zurück.

Antwort

8

Zeichenketten in Datenbanken werden alphabetisch verglichen. Eine Zeichenkette '4.0' ist größer als eine Zeichenkette '200.0', da das Zeichen 4 nach dem Zeichen 2 steht. Sie sollten einen numerischen Typ in Ihrer Datenbank verwenden, wenn Sie diese Art von Abfragen unterstützen müssen. Stellen Sie sicher, dass die Spalte smog einen numerischen Typ hat (z. B. DOUBLE), und verwenden Sie in Ihrer Abfrage BETWEEN 4.0 AND 200.0.

Wenn Sie das Schema nicht ändern können, können Sie CAST: cast(smog as DOUBLE) BETWEEN 4.0 and 200.0 verwenden, jedoch ist diese Lösung weniger effizient.