sql-where-Bedingung für int, aber Spaltentyp ist Varchar
Habe ich die Tabelle mit dem Namen Buttons. Schaltflächen Tabelle habe ich die Spalte button_number . Die Tabelle enthält mehr als 100 Datensätze. Jetzt muss ich wählen-Tasten die Anzahl zwischen 10-50. Wenn ich folgende Abfrage ist es nicht zurückgeben null-Zeile.
select * from Buttons where button_number >= '10' and button_number <='50'
Was ist das problem in der Abfrage. Wenn ich die selbe Abfrage mit verschiedenen Spalte(Datentyp int), dann ist es fein arbeiten. Das problem ist, weil der Datentyp der Spalte? Wenn ja was ist die Lösung für dieses Problem?
Hinweis : button_number Spalte Datentyp ist Varchar.
- Welche Art von DB arbeitest du? Fügen Sie den richtigen tag für deine DB.
- Wenn Sie mark-up code-Einrückungen mit 4 Leerzeichen (oder das schlagen der
{}
- Taste), erhalten Sie die ordnungsgemäße syntax-highlighting. Viel besser als nur Fett. - Ja, wusste ich.. Aber vergessen, es zu tun.. vielen Dank für Ihre update..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den button_number vom Typ varchar ist und Sie versuchen, eine integer-Stil-Vergleich. Sie müssen gegossen, die button_number Spalte auf eine Ganzzahl.
Bearbeiten
Obige Abfrage wird eine Tabelle scan erforderlich da es konvertieren muss jeder button_number eine Ganzzahl vor der Anwendung der where-Klausel. Das ist kein problem für 100 Zeilen, wäre aber ein Probleme mit großen zahlen.
Wie bereits in Mikael Eriksson Antwort, eine bessere alternative wäre, die Art der button_number in eine Ganzzahl (sofern möglich). Dies hätte mehrere Vorteile:
Den anderen Antworten erzählt, die Sie zum cast der Spalte
int
in der Abfrage. Das wird für Sie arbeiten, wenn Sie nur Ganzzahlen in der Spalte. Wenn das der Fall ist, sollten Sie ändern Sie den Datentyp für die Spaltebutton_number
zuint
so dass Sie nicht das Risiko ein, dass ein Zeichen in es, dass eine Unterbrechung Ihrer Abfrage.ändern Sie Ihre Abfrage, wie unten
aber stellen Sie sicher, dass alle Werte der Spalte "button_number" dont haben irgendwelche Zeichen
Je nach DB-Typ und Ihre version, aber in MySQL müssen Sie möglicherweise verwenden Sie SIGNIERT oder UNSIGNIERT sind, wie Ihr Datentyp: