T-Sql удаляет десятичную точку из типа данных Money

Учитывая ограничение использования только T-Sql в Sql Server 2005, есть ли лучший способ удалить десятичную точку из типа данных money, чем преобразование в varchar (здесь неявно), а затем замена десятичной точки?

Вот что у меня есть на данный момент.

SELECT REPLACE(1.23, '.', ''), REPLACE(19.99, '.', '')

Что возвращает желаемые 123 и 1999, но мне было интересно, есть ли лучший способ. Есть предположения?

Ответов (5)

Решение

Умножьте на 100 и затем преобразуйте в int.

Вот это волшебство:

DataFormatString="{0:c0}

Это удалит десятичные знаки.

Не могли бы вы подробнее рассказать о сценарии использования? Удаление десятичной точки из представления немного необычно, поскольку вы потеряете всю информацию о масштабе. Вы предполагаете, что всегда будет две цифры? Если это так, вы можете упростить умножение на 100, а затем округлить перед преобразованием в строку.

Имейте в виду, что тип данных money может содержать до 4 цифр после запятой. Значения с более чем двумя цифрами могут не работать должным образом ни для вашего исходного решения, ни для трюка x100.

Никогда не следует использовать тип данных money для хранения денежных значений. Если вы произведете какие-либо вычисления, вы получите усеченные результаты. Выполните следующее, чтобы понять, что я имею в виду

DECLARE
@mon1 MONEY,
@mon2 MONEY,
@mon3 MONEY,
@mon4 MONEY,
@num1 DECIMAL(19,4),
@num2 DECIMAL(19,4),
@num3 DECIMAL(19,4),
@num4 DECIMAL(19,4)

SELECT
@mon1 = 100, @mon2 = 339, @mon3 = 10000,
@num1 = 100, @num2 = 339, @num3 = 10000

SET @mon4 = @mon1/@mon2*@mon3
SET @num4 = @num1/@num2*@num3

SELECT @mon4 AS moneyresult,
@num4 AS numericresult

Выход: 2949.0000 2949.8525