Стоит ли выбирать типы данных MONEY или DECIMAL (x, y) в SQL Server? - PullRequest
395 голосов
/ 24 февраля 2009

Мне любопытно, существует ли реальная разница между типом данных money и чем-то вроде decimal(19,4) (я полагаю, что именно это используется внутри страны).

Я знаю, что money относится к SQL Server. Я хочу знать, есть ли веская причина выбрать одно из другого; большинство примеров SQL Server (например, база данных AdventureWorks) используют money, а не decimal для таких вещей, как информация о цене.

Должен ли я просто продолжать использовать тип данных money, или вместо него есть преимущество использования десятичного числа? Деньги набирают меньше символов, но это не является веской причиной:)

Ответы [ 12 ]

1 голос
/ 19 октября 2009

Я только что видел эту запись в блоге: Деньги против десятичной дроби в SQL Server .

Что в основном говорит о том, что у денег есть проблема точности ...

declare @m money
declare @d decimal(9,2)

set @m = 19.34
set @d = 19.34

select (@m/1000)*1000
select (@d/1000)*1000

Для типа money вы получите 19,30 вместо 19,34. Я не уверен, есть ли сценарий приложения, который делит деньги на 1000 частей для расчета, но этот пример действительно имеет некоторые ограничения.

0 голосов
/ 18 июля 2018

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

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

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

Например, когда вам не нужно выполнять эти вычисления выше и вам нужно сэкономить 1 байт (деньги занимают 8 байт, а десятичный (19,4) - 9 байт).

Другой пример, когда вам не нужно выполнять эти вычисления выше и вам нужна скорость для обработки огромного количества данных.

Другой пример, когда вам не нужно делать эти вычисления выше, и вам нужно импортировать из допустимых текстовых строк валюты. Попробуйте сделать это с другими числовыми типами: SELECT CONVERT (MONEY, '$ 1,000.68')

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