T-Sql Удалить десятичную точку из типа данных Money - PullRequest
7 голосов
/ 06 августа 2008

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

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

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

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

Ответы [ 5 ]

6 голосов
/ 06 августа 2008

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

3 голосов
/ 08 августа 2008

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

0 голосов
/ 20 мая 2009

Вот магия:

DataFormatString="{0:c0}

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

0 голосов
/ 07 августа 2008

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

0 голосов
/ 06 августа 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...