Целочисленное деление
Иногда недоумение у начинающих работать с SQL Server вызывают результаты подобных запросов:
[[ column ]] |
---|
NULL
[[ value ]] |
Одни (подозреваю, что это пользователи MySQL или Oracle) ожидают результаты типа
т.е. вещественное число, другие -
т.е. округления к ближайшему целому. В то время как SQL Server дает
Чтобы развеять это недоумение, скажу, что операция “/” просто обозначает целочисленное деление (а именно, дает в результате неполное частное), если операнды являются целыми числами. Т.е. отдельного обозначения для этой операции нет, и используется символ “обычного” деления. Если же вы хотите получить десятичное число, то нужно привести хотя бы один операнд к вещественному типу явно (первый столбец) или неявно (второй столбец):
[[ column ]] |
---|
NULL
[[ value ]] |
Операция получения остатка от деления в SQL Server обозначается “%”:
[[ column ]] |
---|
NULL
[[ value ]] |
Теперь что касается некоторых других СУБД.
PostgreSQL ведет себя аналогично SQL Server.
В MySQL для получения неполного частного используется специальный оператор DIV:
[[ column ]] |
---|
NULL
[[ value ]] |
Остаток от деления можно также получить в стиле а-ля Паскаль:
[[ column ]] |
---|
NULL
[[ value ]] |
Хотя будет работать и “общепринятое”
[[ column ]] |
---|
NULL
[[ value ]] |
В Oracle вообще нет операции для получения неполного частного, поэтому результат деления
[[ column ]] |
---|
NULL
[[ value ]] |
потребуется вручную приводить к целому типу с желаемым результатом, например, так:
[[ column ]] |
---|
NULL
[[ value ]] |
или так
[[ column ]] |
---|
NULL
[[ value ]] |
Для получения остатка от деления в Oracle используется функция MOD:
[[ column ]] |
---|
NULL
[[ value ]] |
Наконец, если делитель равен нулю:
[[ column ]] |
---|
NULL
[[ value ]] |
то MySQL возвращает NULL, в то время как другие рассматриваемые здесь СУБД дают ошибку деления на ноль.
Рекомендуемые упражнения:137