2017-08-24 1 views
0

Ich habe eine Tabelle mit einigen Daten. Viele dieser Daten haben den Namen ICA Supermarket mit unterschiedlichen Summen für jede Daten. Wenn ich die folgende SQL-Abfrage verwenden, wird es auch Daten zeigen, mit der Summe unter 100. Dies gilt auch, wenn ich >= '100' auf eine höhere Ziffer zu ändern, für ein Beispiel 200.Wenn Sie Summe> 100 verwenden, zeigen Summen unter 100 immer noch

SELECT * 
FROM transactions 
WHERE data_name LIKE '%ica%' 
AND REPLACE(data_sum, '-', '') >= '100' 

enter image description here

Wenn ich Ändern >= zu <= keine Daten werden überhaupt angezeigt. Hier ist, wie die Tabelle aussieht:

CREATE TABLE IF NOT EXISTS `transactions` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `data_name` tinytext NOT NULL, 
    `data_sum` decimal(10,2) NOT NULL 
    UNIQUE KEY `id` (`id`) 
) 

Ist es, weil data_sum ist ein DECIMAL? Wie kann ich das verhindern? Ich möchte DECIMAL für Summen verwenden :)

Hinweis: data_sum enthält auch Summen, die über minus sind.

Antwort

3

REPLACE(data_sum, '-', '') gibt eine Zeichenfolge zurück. Auch '100' ist eine Zeichenfolge. Daher wird ein String-Vergleich verwendet. Sie sollten ABS Funktion:

SELECT * 
FROM transactions 
WHERE data_name LIKE '%ica%' 
AND ABS(data_sum) >= 100 
0

Suchen Sie Werte> = 100 und < = -100? Oder nur Werte < = -100.

Wenn letzteres, dann

... AND data_sum <= -100 

Dies gilt für DECIMAL, INT, FLOAT usw.

Jeder Tisch 'braucht' einen Primärschlüssel. Fördern Sie dieses EINZIGARTIGE zu PRIMÄR.

Verwandte Themen