2015-12-18 5 views
5

Il comando SQL BETWEEN funziona solo quando gli si assegna un intervallo ridotto per la colonna. Ecco cosa intendo:SQL BETWEEN comando non funziona per intervalli di grandi dimensioni

Il mio codice:

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) 

che corrisponde al comando SQL:

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

e select_data restituisce una matrice 2-D che contiene tutte queste righe.

La colonna a cui faccio riferimento qui ha già salvato tutti i valori pari a 5.0.

Questo funziona FINE!

Tuttavia, quando si aumenta l'intervallo, ad esempio "4.0" E "200.0", non viene restituito nulla.

risposta

8

Le stringhe nei database vengono confrontate in ordine alfabetico. Una stringa '4.0' è maggiore di una stringa '200.0' poiché il carattere 4 arriva dopo il carattere 2. È necessario utilizzare il tipo numerico nel database se è necessario supportare questo tipo di query. Assicurati che la colonna smog abbia un tipo numerico (come DOUBLE) e usi BETWEEN 4.0 AND 200.0 nella tua query.

Se non è possibile modificare lo schema, è possibile utilizzare CAST: cast(smog as DOUBLE) BETWEEN 4.0 and 200.0, tuttavia questa soluzione è meno efficiente.