2016-11-29 7 views
0

Abfrage Ich habe ein Dezimalfeld in der Datenbank, die ich abfragen. Das Feld wird für alle Arten von Zahlen verwendet, also könnte es eine Währung mit 2 Ziffern oder etwas anderes mit einem anderen Format sein. Das Feld ist als Dezimalzahl (15,5) eingerichtet.PHP und MySQL, wie dezimal Spalte

So könnte eine Währung drin wie 4.99000 gespeichert werden und ich formatiere es, wenn ich es nach einer Einrichtung ausspare, die in einer anderen Tabelle gespeichert wird, die mir die Dezimalstellen und das Dezimaltrennzeichen mitteilen wird. Alles in Ordnung, aber wie würde ich so etwas abfragen? Denn "WHERE field = 4.99" wird diesen Datensatz natürlich nicht zurückgeben. Irgendwelche Vorschläge, was ich tun könnte?

UPDATE:

OK, muss ich einen etwas anderen Weg gehen. Ich nehme die eingegebene Nummer und benutze explodieren, um es in ein Array zu teilen. Das weiß ich nach dem Komma. Ich habe 5 Zahlen, um einen nächsten Schritt, den ich

$numericValue = explode($myFormat['decimalseparator'], $value) // could be a . or a , 
$newValue = str_pad($numericValue[1], 5, "0", STR_PAD_RIGHT) ; 
$dbValue = $numericValue[0].'.'.$numericValue[1]; 

Es verwenden scheint, zu arbeiten, aber ich frage mich, ob ich hier etwas beaufsichtigen ...

+4

'wird diesen Datensatz natürlich nicht zurückgeben 'Hast du es versucht? es der Datentyp der Tabellenspalte unterstützt Dezimal, das funktioniert –

+0

ja ich habe es versucht und es hat nicht funktioniert – Luka

+0

teilen Sie Ihre Tabellenstruktur. –

Antwort

0

Wie wäre es etwa so:

SELECT * FROM mytable WHERE 
'field' REGEXP '(^[4]+.[9]+[9]$)|(^[4]+.[9]+[9]+0{1,3}$)'; 

MySQL Regex Dokumentation here.

S.: Die SQL-Abfrage ist nur ein kurzer Rohentwurf, um die Idee zu geben.

+0

Ich kann den Platzhalter nicht verwenden, da er nach der genauen Zahl suchen muss. – Luka

+0

Was bedeutet genaue Zahl? Könnten Sie es bitte ausarbeiten? –

+0

Ich möchte nach 4,99 suchen, wenn der Datensatz also 4.9952 ist, sollte er nicht angezeigt werden. Ich habe oben mit einer Lösung aktualisiert. Ich habe mich gefragt, ob MySql selbst etwas eingebaut hat, aber es scheint mit meiner PHP-Lösung oben zu funktionieren. – Luka

1
SELECT 4.99 = 4.9900000000; 

+---------------------+ 
| 4.99 = 4.9900000000 | 
+---------------------+ 
|     1 | 
+---------------------+