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

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

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

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

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

6.08.2008 19:34:47
5 ОТВЕТОВ
РЕШЕНИЕ

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

7
6.08.2008 19:37:14

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

0
6.08.2008 19:38:38

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

0
6.08.2008 20:59:36

Вы никогда не должны использовать тип данных 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

3
21.05.2012 18:38:10

Вот магия:

DataFormatString="{0:c0}

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

0
30.08.2017 16:03:16
Первоначальное ограничение заключалось в том, что он мог быть только в T-Sql. DataFormatString - это вещь .Net.
Pete 20.05.2009 15:16:16