Próbuję to zrobić:
SELECT CAST(columnName AS INT), moreColumns, etc
FROM myTable
WHERE ...
Przejrzałem często zadawane pytania dotyczące pomocy: http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html , mówi, że mogę to zrobić CAST(val AS TYPE)
, ale to nie działa.
Próbuję zamienić ułamek dziesiętny na int, wartość rzeczywista to 223,00, a chcę 223
Odpowiedzi:
Możesz wypróbować funkcję FLOOR w ten sposób:
SELECT FLOOR(columnName), moreColumns, etc FROM myTable WHERE ...
Możesz także wypróbować funkcję FORMAT , pod warunkiem, że wiesz, że miejsca po przecinku można pominąć:
SELECT FORMAT(columnName,0), moreColumns, etc FROM myTable WHERE ...
Możesz połączyć te dwie funkcje
SELECT FORMAT(FLOOR(columnName),0), moreColumns, etc FROM myTable WHERE ...
źródło
Bardziej zoptymalizowany sposób mysql w tym celu *:
SELECT columnName DIV 1 AS columnName, moreColumns, etc FROM myTable WHERE ...
Użycie DIV 1 to ogromna poprawa szybkości w stosunku do FLOOR , nie wspominając o funkcjach opartych na ciągach znaków, takich jak 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)
(*) UWAGA: Jak wskazał Grbts, należy pamiętać o zachowaniu DIV 1, gdy jest używany z wartościami bez znaku / dodatnimi.
źródło
Z artykułu, do którego utworzyłeś link:
Spróbuj
SIGNED
zamiastINT
źródło
Użyj tego
mysql> SELECT TRUNCATE(223.69, 0); > 223
Oto link
źródło
Istnieje ważna różnica między floor () a DIV 1. W przypadku liczb ujemnych zachowują się inaczej. DIV 1 zwraca część całkowitą (rzutowaną tak, jak robi to ze znakiem), podczas gdy floor (x) zwraca „największą wartość całkowitą nie większą niż x” (z instrukcji). A więc: select floor (-1.1) daje -2, a select -1,1 div 1 daje -1
źródło
Funkcja CAST () nie obsługuje „oficjalnego” typu danych „INT” w MySQL, nie ma go na liście obsługiwanych typów . W MySQL można zamiast tego użyć „PODPISANY” (lub „NIEPODPISANY”):
Jednak wydaje się, że jest to specyficzne dla MySQL (nie znormalizowane), więc może nie działać z innymi bazami danych. Przynajmniej ten dokument (Drugi projekt nieformalnego przeglądu) ISO / IEC 9075: 1992, baza danych nie wymienia „PODPISANY” / „NIEPODPISANY” w sekcji
4.4 Numbers
.Ale DECIMAL jest zarówno ustandaryzowany, jak i obsługiwany przez MySQL, więc poniższe powinny działać dla MySQL (przetestowane) i innych baz danych:
Według dokumentacji MySQL :
źródło
Istnieje również ROUND (), jeśli twoje liczby niekoniecznie zawsze kończą się na .00. RUND (20.6) da 21, a ROUND (20.4) da 20.
źródło
możesz spróbować tego:
SELECT columnName1, CAST(columnName2 AS SIGNED ) FROM tableName
źródło
Próbować
cast (columnName as unsigned)
unsigned jest tylko wartością dodatnią
Jeśli chcesz zawierać wartość ujemną, a następnie
cast (columnName as signed)
,Różnica pomiędzy znak ujemny (to) oraz unsigned (dwukrotnej wielkości znaku, ale nieujemna)
źródło
1 cent: bez spacji b / w CAST i (wyrażenie). tj. CAST (columnName AS SIGNED).
źródło