CAST DECIMAL to INT
Я пытаюсь сделать это:
SELECT CAST(columnName AS INT), moreColumns, etc
FROM myTable
WHERE ...
Я просмотрел справочную часто задаваемые вопросы здесь: http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html, он говорит, что я могу сделать это как CAST(val AS TYPE)
, но это не работа.
Попытка конвертировать десятичное число в int, реальное значение - 223,00, и я хочу 223
Ответы
Ответ 1
Вы можете попробовать FLOOR функцию:
SELECT FLOOR(columnName), moreColumns, etc
FROM myTable
WHERE ...
Вы также можете попробовать FORMAT, если знаете, что десятичные разряды можно опустить:
SELECT FORMAT(columnName,0), moreColumns, etc
FROM myTable
WHERE ...
Вы могли бы объединить две функции
SELECT FORMAT(FLOOR(columnName),0), moreColumns, etc
FROM myTable
WHERE ...
Ответ 2
Из статьи, которую вы связали с:
Тип может быть одним из следующих значений:
БИНАРНЫЙ [(N)]
CHAR [(N)]
DATE
DATETIME
ДЕСЯТИЧНАЯ [(М [, D])]
ПОДПИСАНО [INTEGER]
TIME
НЕПРАВИЛЬНО [INTEGER]
Попробуйте SIGNED
вместо INT
Ответ 3
Более оптимизированный способ в mysql для этого *:
SELECT columnName DIV 1 AS columnName, moreColumns, etc
FROM myTable
WHERE ...
Использование DIV 1 является огромное ускорение скорости над FLOOR, не говоря уже о строковых функциях, таких как ФОРМАТ
(*) ПРИМЕЧАНИЕ. Как указано Grbts, помните о поведении DIV 1 при использовании с непознанными/положительными значениями.
Ответ 4
Существует значительная разница между floor() и DIV 1. Для отрицательных чисел они ведут себя по-разному. DIV 1 возвращает целочисленную часть (как указано как подписанная), а floor (x) возвращает "наибольшее целочисленное значение не больше x" (из руководства). Итак: выберите пол (-1.1) результат -2, а выберите -1.1 div 1 результат -1
Ответ 5
используйте этот
mysql> SELECT TRUNCATE(223.69, 0);
> 223
Здесь ссылка
Ответ 6
Функция CAST() не поддерживает "официальный" тип данных "INT" в MySQL, это не в список поддерживаемых типов, Вместо MySQL вместо него можно использовать "SIGNED" (или "UNSIGNED" ):
CAST(columnName AS SIGNED)
Однако, похоже, это зависит от MySQL (не стандартизован), поэтому он может не работать с другими базами данных. По крайней мере этот документ (Второй проект неофициального обзора) ISO/IEC 9075: 1992, База данных не содержит список "ПОДПИСАННЫЙ" / "НЕОПРЕДЕЛЕННЫЙ" в разделе 4.4 Numbers
.
Но DECIMAL стандартизирован и поддерживается MySQL, поэтому для MySQL (тестируемых) и других баз данных должно работать следующее:
CAST(columnName AS DECIMAL(0))
В соответствии с Документами MySQL:
Если масштаб равен 0, значения DECIMAL не содержат десятичной точки или дробная часть.
Ответ 7
Также есть ROUND(), если ваши номера не всегда заканчиваются на .00. КРУГЛЫЙ (20.6) даст 21, а КРУГЛЫЙ (20.4) даст 20.
Ответ 8
вы можете попробовать следующее:
SELECT columnName1, CAST(columnName2 AS SIGNED ) FROM tableName
Ответ 9
Попробуйте cast (columnName as unsigned)
unsigned - только положительное значение
Если вы хотите включить отрицательное значение, тогда cast (columnName as signed)
,
Разница между значком (отрицательный include) и unsigned (в два раза больше знака, но неотрицательным)
Ответ 10
1 цент:
нет пробела b/w CAST и (выражение).
то есть CAST (имя столбца AS SIGNED).