Ich versuche das zu tun:
SELECT CAST(columnName AS INT), moreColumns, etc
FROM myTable
WHERE ...
Ich habe mir die Hilfe-FAQs hier angesehen: http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html . Es heißt, ich kann es so machen CAST(val AS TYPE)
, aber es funktioniert nicht.
Beim Versuch, eine Dezimalstelle in int umzuwandeln, beträgt der reale Wert 223,00 und ich möchte 223
Antworten:
Sie können die FLOOR- Funktion folgendermaßen ausprobieren :
SELECT FLOOR(columnName), moreColumns, etc FROM myTable WHERE ...
Sie können auch die FORMAT- Funktion ausprobieren , sofern Sie wissen, dass die Dezimalstellen weggelassen werden können:
SELECT FORMAT(columnName,0), moreColumns, etc FROM myTable WHERE ...
Sie können die beiden Funktionen kombinieren
SELECT FORMAT(FLOOR(columnName),0), moreColumns, etc FROM myTable WHERE ...
quelle
Aus dem Artikel, den Sie verlinkt haben:
Versuchen Sie
SIGNED
stattINT
quelle
Ein optimierterer Weg hinein MySQL für diesen Zweck*:
SELECT columnName DIV 1 AS columnName, moreColumns, etc FROM myTable WHERE ...
Die Verwendung von DIV 1 ist eine enorme Geschwindigkeitsverbesserung gegenüber FLOOR , ganz zu schweigen von stringbasierten Funktionen wie FORMAT
mysql> SELECT BENCHMARK(10000000,1234567 DIV 7) ; +-----------------------------------+ | BENCHMARK(10000000,1234567 DIV 7) | +-----------------------------------+ | 0 | +-----------------------------------+ 1 row in set (0.83 sec) mysql> SELECT BENCHMARK(10000000,1234567 / 7) ; +---------------------------------+ | BENCHMARK(10000000,1234567 / 7) | +---------------------------------+ | 0 | +---------------------------------+ 1 row in set (7.26 sec) mysql> SELECT BENCHMARK(10000000,FLOOR(1234567 / 7)) ; +----------------------------------------+ | BENCHMARK(10000000,FLOOR(1234567 / 7)) | +----------------------------------------+ | 0 | +----------------------------------------+ 1 row in set (8.80 sec)
(*) HINWEIS: Beachten Sie, wie von Grbts angegeben, das Verhalten von DIV 1 bei Verwendung mit nicht vorzeichenlosen / positiven Werten.
quelle
benutze das
mysql> SELECT TRUNCATE(223.69, 0); > 223
Hier ist ein Link
quelle
Es gibt einen wichtigen Unterschied zwischen floor () und DIV 1. Bei negativen Zahlen verhalten sie sich unterschiedlich. DIV 1 gibt den ganzzahligen Teil zurück (wie gegossen wie signiert), während Etage (x) "den größten ganzzahligen Wert nicht größer als x" (aus dem Handbuch) zurückgibt. Also: Wählen Sie Etage (-1,1) , um -2 zu erhalten, während Auswahl von -1,1 Div 1 -1 ergibt
quelle
Die CAST () -Funktion unterstützt den "offiziellen" Datentyp "INT" in MySQL nicht, sie ist nicht in der Liste der unterstützten Typen enthalten . Mit MySQL könnte stattdessen "SIGNED" (oder "UNSIGNED") verwendet werden:
Dies scheint jedoch MySQL-spezifisch (nicht standardisiert) zu sein, sodass es möglicherweise nicht mit anderen Datenbanken funktioniert. Zumindest in diesem Dokument (Zweiter informeller Überprüfungsentwurf) ISO / IEC 9075: 1992, Datenbank ist im Abschnitt "SIGNIERT" / "UNSIGNIERT" nicht aufgeführt
4.4 Numbers
.DECIMAL ist jedoch sowohl standardisiert als auch wird von MySQL unterstützt. Daher sollte Folgendes für MySQL (getestet) und andere Datenbanken funktionieren:
Laut den MySQL-Dokumenten :
quelle
Es gibt auch ROUND (), wenn Ihre Zahlen nicht unbedingt immer mit .00 enden. RUNDE (20.6) ergibt 21 und RUNDE (20.4) 20.
quelle
Sie können dies versuchen:
SELECT columnName1, CAST(columnName2 AS SIGNED ) FROM tableName
quelle
Versuchen
cast (columnName as unsigned)
vorzeichenlos ist nur ein positiver Wert
Wenn Sie möchten , negativen Wert enthalten, dann
cast (columnName as signed)
,Der Unterschied zwischen Vorzeichen (negativ ist) und ohne Vorzeichen (doppelt so groß wie der Zeichen, aber nicht-negativ)
quelle
1 Cent: kein Leerzeichen s / w CAST und (Ausdruck). dh CAST (Spaltenname WIE UNTERZEICHNET).
quelle