Подтвердить что ты не робот

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

4b9b3361

Ответ 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

Более оптимизированный способ в для этого *:

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).