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

StackOverflow https://stackoverflow.com/questions/3894

Вопрос

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

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

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

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

Это было полезно?

Решение

Умножьте на 100, а затем преобразуйте в целое число.

Другие советы

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

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

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

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

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

DataFormatString="{0:c0}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top