Как конвертировать из типа данных денег в SQL-сервер?

У меня есть тип данных денег в SQL Server. Как переформатировать 0.00 в 0 в моем запросе?

Ответы

Ответ 1

Обычные денежные конверсии сохранят отдельные гроши:

SELECT convert(varchar(30), moneyfield, 1)

Последний параметр определяет, как выглядит выходной формат:

0 (по умолчанию) Нет запятых каждые три цифры слева от десятичной точки и две цифры справа от десятичной точки; например, 4235,98.

1 Запятая каждые три цифры слева от десятичной точки и две цифры справа от десятичной точки; например, 3510,92.

2 Без запятой каждые три цифры слева от десятичной точки и четыре цифры справа от десятичной точки; например, 4235,9819.

Если вы хотите урезать пенни и сосчитать в фунтах, вы можете использовать округление до ближайшего фунта, от пола до самого низкого всего фунта или потолка, чтобы округлить фунты:

SELECT convert(int, round(moneyfield, 0))
SELECT convert(int, floor(moneyfield))
SELECT convert(int, ceiling(moneyfield))

Ответ 2

Будет ли это делать, чтобы помочь вам? Деньги должны иметь десятичные знаки...

DECLARE @test AS money
SET @test = 3
SELECT CAST(@test AS int), @test

Ответ 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

Теперь, чтобы ответить на ваш вопрос (это было немного расплывчато), тип данных денег всегда имеет два места после десятичной точки. Используйте целочисленный тип данных, если вы не хотите дробную часть или преобразовать в int.

Возможно, вы хотите использовать десятичный или числовой тип данных?

Ответ 4

Я нашел этот подход прямым и полезным.

CONVERT (VARCHAR (10), CONVERT (ДЕНЬГИ, имя поля)) AS PRICE

Ответ 5

Это выглядит как проблема формирования. Что касается типа денег SQL Server 0 == 0.00

Если вы пытаетесь отобразить 0 в say С#, а не 0.00, вы должны преобразовать его в строку и отформатировать, как хотите. (или усечь его.)

Ответ 6

Кажется, что несмотря на внутренние ограничения типа данных денег, если вы уже используете его (или унаследовали его, как я), ответ на ваш вопрос: используйте DECIMAL.

Ответ 7

Вы можете попробовать следующее:

SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2)

Ответ 8

У меня тоже была эта проблема, и я некоторое время спотыкался о ней. Я хотел показать 0.00 как 0 и в остальном сохранить десятичную точку. Следующие действия не выполнялись:

CASE WHEN Amount= 0 THEN CONVERT(VARCHAR(30), Amount, 1) ELSE Amount END

Потому что полученный столбец был вынужден быть столбцом MONEY. Чтобы решить эту проблему, следующие работы

CASE WHEN Amount= 0 THEN CONVERT(VARCHAR(30), '0', 1) ELSE CONVERT (VARCHAR(30), Amount, 1) END

Это имело значение, потому что мой конечный столбец назначения был VARCHAR (30), а потребители этого столбца выходили бы из строя, если сумма была "0.00" вместо "0".

Ответ 9

вы можете использовать

SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2)

или

SELECT CurrencyNoDecimals = '$'+ LEFT( CONVERT(varchar, @MoneyValue,1),    
       LEN (CONVERT(varchar, @MoneyValue,1)) - 2)