Як отримати результат з плаваючою дією, розділивши два цілих значення за допомогою T-SQL?


173

Використовуючи T-SQL та Microsoft SQL Server, я б хотів вказати кількість десяткових цифр, коли я ділю на два цілих числа, наприклад:

select 1/3

Це зараз повертається 0. Я хотів би, щоб він повернувся 0,33.

Щось на зразок:

select round(1/3, -2)

Але це не працює. Як я можу досягти бажаного результату?


3
Ви пробували 1,0 / 3?
Тіло

Отриманих відповідей більш ніж достатньо
LaBracca

Відповіді:


277

Пропозиції від stb та xiowl чудові, якщо ви шукаєте постійну. Якщо вам потрібно використовувати наявні поля чи параметри, які є цілими числами, ви можете передати їх як плавні:

SELECT CAST(1 AS float) / CAST(3 AS float)

або

SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)

Або ви можете призначити їх як десятковий знак, якщо ви хочете десятковий результат.
Тим

30
ВИБІР 1.0 * MyInt1 / MyInt2
Troglo

@TroubleZero для використання MySQLdecimal
itsazzad

велике спасибі, ти врятував мені день. Мене судили CAST (7/3 AS float), але повернулися 2 знову. Отже, кинутих цифр вирішено моя проблема.
Yasin Yörük

3
немає необхідності подавати як ділене і дільник, см відповідь @MS » stackoverflow.com/a/30639343/2866644
ROBOTIK

70

Тому що SQL Server виконує ціле ділення. Спробуйте це:

select 1 * 1.0 / 3

Це корисно, коли ви передаєте цілі числа як парами.

select x * 1.0 / y

1
Можна навіть залишити нулі.
Іван,

43

Не потрібно обирати їх обох. Тип даних результатів для підрозділу - це завжди той, який має перевагу більш високого типу даних . Таким чином, рішення повинно бути:

SELECT CAST(1 AS float) / 3

або

SELECT 1 / CAST(3 AS float)


13

Я розумію, що CASTing до FLOATзаборонено в MySQL і призведе до помилки при спробі, CAST(1 AS float)як зазначено в MySQL dev .

Вирішення цього питання просте. Просто роби

(1 + 0.0)

Потім використовуйте ROUNDдля досягнення певної кількості знаків після коми

ROUND((1+0.0)/(2+0.0), 3)

Наведений вище SQL ділить 1 на 2 і повертає поплавці на 3 знаки після коми, як це було б 0.500.

Можна CASTдо таких типів: двійкові, знаки, дата, дата, десятковий, json, nchar, підписані, час та без підпису .


3
MySQL дозволяє CAST, він просто не дозволяє робити кастинг FLOAT. Накиньте DECIMALзамість цього. Див , наприклад , stackoverflow.com/questions/7368163 / ... .
маркуск

7

Схоже, цей трюк працює в SQL Server і є коротшим (на основі попередніх відповідей)

SELECT 1.0*MyInt1/MyInt2

Або:

SELECT (1.0*MyInt1)/MyInt2

2
Мені це найбільше сподобалось, це навіть приємно виглядає в процентних обчисленнях:SELECT 100.0 * @Elapsed / @Total
EliSherer

3

Використовуй це

select cast((1*1.00)/3 AS DECIMAL(16,2)) as Result

Ось у цьому sql спочатку перетворять на плаваючий чи помножують на 1,00. Який вихід буде числом float. Ось я розглядаю 2 десяткових знаки. Ви можете вибрати те, що вам потрібно.


2

Якщо ви прийшли сюди (як і я), щоб знайти рішення для цілого значення , ось відповідь:

CAST(9/2 AS UNSIGNED)

повертає 5

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.