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

голоса
7

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

Вот то, что я в настоящее время.

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

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

Задан 06/08/2008 в 20:34
источник пользователем
На других языках...                            


5 ответов

голоса
6

Умножьте на 100, а затем преобразовать в междунар.

Ответил 06/08/2008 d 20:37
источник пользователем

голоса
3

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

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

Ответил 08/08/2008 d 14:53
источник пользователем

голоса
0

Вот магия:

DataFormatString="{0:c0}

Это приведет к удалению знака после запятой.

Ответил 20/05/2009 d 07:02
источник пользователем

голоса
0

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

Ответил 06/08/2008 d 21:59
источник пользователем

голоса
0

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

Ответил 06/08/2008 d 20:38
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more