2009-03-12 8 views
7

Я хочу преобразовать тип данных денег в десятичное число, потому что хочу записать результаты до 8 знаков после запятой.В SQL как я могу преобразовать тип данных денег в десятичный знак?

Например, в таблице курсов валют я вижу скорость, сохраненную как 2871047428.20 как тип данных денег; используя Microsoft SQL Management Studio, я хочу разделить это на 10000000 для достижения результата 287.10474282; однако в результате я получаю 287.1047.

Я считаю, что причина, я получаю только 4 знака после запятой, потому что это деньги типа данных, и поэтому я думаю, что путь вперед, чтобы преобразовать это десятичный тип данных ....

ответ

7

Здесь сравнение левая колонка десятичное значение, правый столбец расчетное значение денег:

DECLARE @money AS money 
SET @money = 2871047428.20 
SELECT CAST(@money AS decimal(34,4))/10000000, @money/10000000 

Смотрите также здесь на переполнение стека:

+1

Спасибо Я теперь но я не могу использовать команду SET, потому что я использовал 2871047428.20 в качестве примера. Это валютный курс, который варьируется в зависимости от фактического кода валюты (например, EUR, USD и т. Д.), И вам нужно будет забрать самые последние курсы валют из таблицы .... – 2009-03-12 15:01:01

+0

SELECT @exchangeReate = ... FROM ExchangeRate .. - BTW: Не стесняйтесь повышать и/или принимать, если это помогло найти решение. ;-) – splattne

+0

Привет, я приближаюсь, но все еще не работает правильно: - DECLARE @exchangeRate AS money SELECT @exchangeRate = CAST (Rate AS decimal (34,4))/10000000 FROM ... Is этот синтаксис прав? Да, я буду голосовать позже, спасибо еще раз. – 2009-03-12 15:29:05

0

splattne является почти правильно, за исключением двух незначительных изменений, за исключением:

DECLARE @money AS money 
SET @money = 2871047428.20 
SELECT CAST(@money AS decimal(34,6))/10000000.0, @money/10000000.0 

Это даст правильный ответ: +287,10474282. То, что я сделал, это изменение значения точности и добавление «.0» к значению деления.

Единственное, что меня озадачивает прямо сейчас, - это то, что я должен указать значение как десятичное (34,6) вместо ожидаемого десятичного числа (34,8).

Итак, я написал запрос другим способом, что делает больше смысла для меня:

DECLARE @money AS money 
SET @money = 2871047428.20 
SELECT CAST((@money/10000000.0) AS decimal(34,8)), @money/10000000.0 

Пожалуйста, смотрите который работает для вас.

0

Вы все поражающие странности десятичного деления Вот мой ответ на another thread, T-SQL Decimal Division Accuracy

И вы можете иметь неявные преобразования с плавающей точкой тоже из-за data type precedence, если вы используете 10000000,0

DECLARE @money AS money 
SET @money = 2871047428.20 
--Oddities 
SELECT 
    CAST(@money AS decimal(34,8))/10000000, 
    CAST(@money AS decimal(34,8))/10000000.0, 
    CAST(@money AS decimal(34,8))/10000000.00, 
    CAST(@money AS decimal(34,8))/10000000.000, 
    CAST(@money AS decimal(34,8))/10000000.0000 
--Should be safe. My brain hurts if I work through p and s 
SELECT 
    CAST(@money AS decimal(38,8))/CAST(10000000 AS decimal(8,0)) 

 Смежные вопросы

  • Нет связанных вопросов^_^