2015-12-18 16 views
5

Polecenie SQL MIĘDZY działa tylko wtedy, gdy nadam mu mały zakres dla kolumny. Oto co mam na myśli:Polecenie SQL BETWEEN nie działa dla dużych zakresów

Mój kod:

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) 

co odpowiada poleceniu SQL:

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

i select_data zwraca tablicę 2-D zawierający wszystkie te wiersze.

Kolumna, do której się tutaj odwołuję, już zapisała wszystkie wartości równe 5.0.

To działa FINE!

Ale gdy zwiększam zakres do, powiedzmy "4.0" I "200.0", to nic nie zwraca.

Odpowiedz

8

Łańcuchy w bazach danych są porównywane alfabetycznie. Ciąg '4.0' jest większy niż ciąg '200.0', ponieważ znak 4 występuje po znaku 2. Powinieneś użyć typu numerycznego w bazie danych, jeśli potrzebujesz obsługi tego rodzaju zapytań. Upewnij się, że kolumna smog ma typ numeryczny (taki jak DWUKROTNY) i użyj w zapytaniu BETWEEN 4.0 AND 200.0.

Jeśli nie możesz zmienić schematu, możesz użyć CAST: cast(smog as DOUBLE) BETWEEN 4.0 and 200.0, jednak to rozwiązanie jest mniej wydajne.

Powiązane problemy