Ошибка арифметического переполнения при преобразовании чисел в тип данных числовой - PullRequest
3 голосов
/ 29 августа 2011

Я сталкиваюсь с ошибкой в ​​моем сценарии SQL:

Ошибка арифметического переполнения при преобразовании чисел в тип данных числовые

select x.MemberName,x.DOB,x.FilePath,x.Medication,x.NDC,x.Directions,x.Name,x.Strength,x.GenericName,x.QtyOrdered,x.DaysSupply,x.DateFilled, 
CASE
    WHEN x.test = 0  THEN 'N/A'
    WHEN compliance > 100.0   THEN '100.0'
    ELSE CONVERT(VARCHAR(5), CAST(FLOOR(compliance *10)/10.0 AS DECIMAL(3,1)))
END as [Compliance]

Я сталкиваюсь с ошибкой тольковыше синтаксической строки.

Ответы [ 2 ]

7 голосов
/ 29 августа 2011

Вот ваша проблема:

declare @compliance decimal(10,5)

set @compliance = 100.0  --  <----------------

select CAST(FLOOR(@compliance *10)/10.0 AS DECIMAL(3,1))

Выдает «Ошибка арифметического переполнения при преобразовании чисел в тип данных числовой».Изменение на DECIMAL(4,1) работает, или, как предлагает @paola, измените ваше условие на >= 100.0

decimal(p,s): 

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

s (шкала) - это количество десятичных цифр, которое будет сохранено справа от десятичной точки.Это число вычитается из p, чтобы определить максимальное количество цифр слева от десятичной точки.

В вашем случае decimal(3, 1) означает всего 3 цифры с 1 цифрой справа отдесятичная точка,

99.9

, тогда как decimal(4,1) предоставляет всего 4 цифры с 1 цифрой справа от десятичной точки,

999.9
3 голосов
/ 07 ноября 2013

На этот вопрос уже дан ответ, но , почему важен.

Числовое значение определяет ОБЩЕЕ количество цифр, а затем число после десятичного числа.

Таким образом, DECIMAL (4,1) показывает 123,4 DECIMAL (4,3) показывает 1,234

В обоих случаях у вас есть всего 4 цифры.В одном случае у вас есть 1 после десятичной дроби, оставляя 3 перед десятичной дробью.И наоборот.

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