Используйте функцию floor()
.floor(111.222)
вернет 111
.Это не округляет число, поэтому floor(111.999)
также вернет 111
(что отличается от поведения round()
).
При использовании функции floor тип данных будетпреобразуется из десятичного в целое число.
Использование floor()
преобразует данные в целое число.Если вы действительно хотите изменить тип данных (почему?), Вам необходимо привести спроецированный столбец к целому числу:
cast(floor(111.999) as integer) as whole_num
Обратите внимание, что приведение к самому себе округление вывода.
SQLFiddle demo здесь .
в условии, что я хочу написать выражение равенства ...), но Table1.id является десятичным и Table2.id это целое число
Это действительно не имеет значения в таком случае.В основном у Oracle есть один тип данных для числовых данных, число.Есть псевдонимы (десятичные, целые и т. Д.), Но они свободно конвертируются в число.То есть 111.000 = 111
.Таким образом, вы можете написать свое соединение в точности так, как вы показали, без необходимости преобразования типов данных.
Единственное, о чем вам нужно беспокоиться, это если десятичный идентификатор не является чистым целым числом, то есть если id != floor(id)
.Это не должно быть проблемой, если таблица заполнена правильно (и вы не используете один из типов данных с плавающей запятой).