2016-04-05 2 views
0

Я пытаюсь выполнить результат этой обратной задачи в целое число?T-SQL cast nesting

SELECT 
    CAST(7 AS DECIMAL (18,8)) * CAST(365 AS DECIMAL (18,8)) 
    /CAST(12 AS DECIMAL (18,8))/CAST(7 AS DECIMAL (18,8)) 

Результат был 30.416666

Но я хочу CAST его обратно к целому числу т.е. 30

Я знаю, что это может быть сделано ЛИТЬЕ всего много, но не может получить вложенности правильно?

+0

Вы сказали, что вы хотите «30,416666», чтобы быть отлиты на целое число «39» ..... Вы имели в виду «30» или «31 "а не 39? – Anssssss

+0

Возможно, вы хотите ['Floor()'] (https://msdn.microsoft.com/en-us/library/ms178531.aspx) или ['Round()'] (https://msdn.microsoft.com /en-us/library/ms175003.aspx). Совет. Полезно помечать вопросы базы данных как с помощью соответствующего программного обеспечения (MySQL, Oracle, DB2, ...) и версии, например. 'SQL-сервер-2014'. Различия в синтаксисе и особенностях часто влияют на ответы. («ВЫБОР» (CAST (7 AS DECIMAL (18,8)) * CAST (365 AS DECIMAL (18,8))/CAST (12 AS DECIMAL (18,8))/CAST (7 AS DECIMAL (18,8)) как Int) 'слишком легко.) – HABO

+0

Скобки - ваши друзья. Объятия и использования. – UnhandledExcepSean

ответ

0

Вам просто нужно, чтобы бросить окончательный результат INT

SELECT cast(CAST(7 AS DECIMAL(18, 8)) * CAST(365 AS DECIMAL(18, 8)) 
    /CAST(12 AS DECIMAL(18, 8))/CAST(7 AS DECIMAL(18, 8)) AS INT) 
+0

Контроль *, когда * округление/усечение происходит, является веской причиной для того, чтобы сделать все десятичным и затем очистить в конце, особенно если речь идет о финансовых расчетах. –

+0

Вы правы, я пропустил этот момент. Благодарю. – FLICKER