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

всякий раз, когда мне нужно довольно длинное «строковое» поле в CDS, я вместо этого стремлюсь создать мемо-поле. Помимо вышеупомянутой проблемы с отображением (которая может быть решена довольно безболезненно), есть несколько других ограничений, поэтому у меня есть собственный потомок компакт-дисков. формат внутренней строки hyperbase (не vglib) одинаков, поэтому он ничего не изменит в этом отношении. Между прочим, есть dac (например, firedac), позволяющие настраивать и выбирать отображение типа целевого поля. не уверен, что компоненты ado могут быть исправлены / улучшены для достижения аналогичной функциональности. более того, в наборе данных iirc firedac есть возможность управления внутренней структурой полей строки (встроенный буфер в строке или просто указатель на динамически размещаемый буфер), но он не заменяет компакт-диски 1: 1.

7
задан splattne 12 March 2009 в 12:22
поделиться

4 ответа

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

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

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

7
ответ дан 7 December 2019 в 07:50
поделиться

ответ 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
ответ дан 7 December 2019 в 07:50
поделиться

Вы все совершаете нападки, причуды десятичного подразделения Вот мой ответ на другой поток, Точность Подразделения Десятичного числа T-SQL

И у Вас могут быть неявные преобразования плавающие также из-за приоритета типов данных, если Вы используете 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))
0
ответ дан 7 December 2019 в 07:50
поделиться
    SELECT CAST(currency_rate AS decimal) / 10000000 FROM ...
0
ответ дан 7 December 2019 в 07:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: