[SQL] BETWEEN bei varchar Spalten

08/07/2020 01:06 Legithos#1
Hallo zusammen,

ich habe mal wieder n kleines Problemchen in meinem Code.

Ich habe eine Tabelle 'table' mit einer Spalte 'column'. Die Spalte ist vom Typ varchar und dort werden verschiedene Werte gespeichert. Die verschiedenen Werte können Ganzzahlen (zb ein Alter) oder aber auch ein String (zb ein Name) sein.

Falls in 'column1' eine Zahl steht, würde ich gerne von einer SQL-query alle Einträge zwischen zwei Eingaben von zwei Inputfeldern haben.

Beispiel:

HTML Code:
<input type='text' name='value1'> und <input type='text' name='value2'>
Ich will nun alle Einträge in meiner Tabelle 'table' und der Spalte 'column', die zwischen meinen Input-Eingaben liegen.

Code:
$pdo->prepare("SELECT column FROM table WHERE column BETWEEN :value1 AND :value2");
$stmt->execute([
   'value1' => $_POST['value1'],
   'value2' => $_POST['value2']
]);
Prinzipiell nicht wild und eigentlich relativ simpel .. NUR funktioniert es so nicht. Ich denke mal es liegt daran, dass zwar in der 'column' eine Ganzzahl steht (das Alter), die Spalte jedoch vom Typ ein Varchar ist.

Was ich bisher probiert habe:
  • Mit 'column' als Typ int statt varchar ausprobiert und es funktioniert. - Nur fällt hier das Speichern der Strings - zb Namen flach.
  • Casten in der SQL Query mit CAST('column' AS INT) oder CONVERT(INT, column). Ich habe auch schon versucht die value's als varchar zu casten.
  • BETWEEN durch <= und >= ersetzt.

Mir ist bewusst, dass es besser ist, Spalten entweder für Zahlen oder für Strings zu nutzen. In meinem aktuellen Projekt ist dies leider nicht möglich, da die Spalte variabel genutzt werden muss.

Vielen Dank schonmal,
Legithos
08/07/2020 12:22 False#2
Sowohl mit between als auch mit Operatoren funktioniert es ohne Probleme.

Between: [Only registered and activated users can see links. Click Here To Register...]
Mit Operatoren: [Only registered and activated users can see links. Click Here To Register...]
08/07/2020 13:25 Legithos#3
Hat mir schon geholfen. Das Problem war, dass ich in meinem richtigen Code folgendes PDO Array hatte:

Code:
$stmt->execute([
   'value_1' => $_POST['value1'],
   'value_2' => $_POST['value2']
]);
Das funktioniert nicht. Er kommt mit dem _ durcheinander. Habs ohne den _ gemacht und es funktioniert einwandfrei. Danke !