T-Sql Удалить десятичную точку из типа данных Money
Учитывая ограничение использования только T-Sql в Sql Server 2005, есть ли лучший способ удалить десятичную точку из типа данных money, чем преобразование в varchar (здесь неявно), а затем заменить десятичную точку?
Вот что у меня сейчас.
SELECT REPLACE(1.23, '.', ''), REPLACE(19.99, '.', '')
Который возвращает желаемые 123 и 1999, но мне было интересно, есть ли лучший способ. Какие-нибудь мысли?
5 ответов
Вы никогда не должны использовать тип данных 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
Вот магия:
DataFormatString="{0:c0}
Это удалит десятичные знаки.
Не могли бы вы быть более конкретным в отношении варианта использования? Удаление десятичной точки из представления немного необычно, учитывая, что вы потеряете всю информацию о масштабе. Вы предполагаете, что всегда будет две цифры? Если это так, вы можете упростить умножение на 100, а затем округлить до преобразования в строку.
Помните, что тип данных money может содержать до 4 цифр после запятой. Значения, содержащие более двух цифр, могут не работать должным образом ни для исходного решения, ни для трюка x100.