SQL Server 2005 varchar теряет десятичные разряды, преобразуя их в десятичные - PullRequest
0 голосов
/ 24 декабря 2008
Declare @BadDecimal varchar(5)
Set @BadDecimal = '4.5'
Declare @GoodDecimal Decimal
Set @GoodDecimal = @BadDecimal
Select @GoodDecimal

--Outputs 5

Почему?

Ответы [ 4 ]

6 голосов
/ 24 декабря 2008

Попробуйте

Declare @GoodDecimal Decimal(2,1)

edit: изменено на (2,1) после запроса.

4 голосов
/ 24 декабря 2008

Коэнджи избил меня до этого ...

Вам необходимо объявить свои десятичные дроби, используя этот формат. Десятичное число (p, s)

p = максимальное общее количество десятичных цифр, которое может быть сохранено как слева, так и справа от десятичной точки. Точность должна быть от 1 до максимальной точности 38. Точность по умолчанию - 18.

s = максимальное количество десятичных цифр, которое можно сохранить справа от десятичной точки. Масштаб должен быть от 0 до p. Масштаб может быть указан, только если указана точность. Масштаб по умолчанию - 0; следовательно, 0 <= s <= p. Максимальные размеры хранилища зависят от точности. </p>

1 голос
/ 24 декабря 2008

приведение или преобразование в явное десятичное число (цифры, точность) работает:

SELECT CONVERT(DECIMAL(5, 2), '4.5')
SELECT CAST('4.5' AS DECIMAL(5,2))

В справке SQLServer указано, что каждая комбинация (цифры, точность) обрабатывается как отдельный тип данных.

1 голос
/ 24 декабря 2008

Попробуйте Set @BadDecimal = '4,5'

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