Что было бы надежным способом получить дробное значение из числа?

У меня есть несколько типов Decimal(8, 2) и используют Substring для получения дробного значения.

 Eg) declare @val decimal(8, 2), @strVal varchar(10) set @val = 15.80 set @strVal = cast(@val as varchar) select @val, substring(@strVal, charindex('.', @strVal), len(@strVal)) 

Есть ли лучший способ просто получить дробное значение, .80 из @val без необходимости его преобразования в символ?
Мне интересно, есть ли встроенная функция UDF (пользовательская функция), которая будет анализировать вместо того, чтобы запускать мою собственную версию.

Используйте оператор модуля (%). Вы получите 0.80 .

Как это:

 declare @val decimal(8, 2) set @val = 15.80 select @val, @val % 1 

Я думаю, вы имеете в виду дробное значение, а не десятичное значение. У вас уже есть десятичное значение. Чтобы получить дробное значение, используйте функции Round или Floor

  Declare @Fraction Decimal(8,2) Set @Fraction = @Val - Floor(@Val) 

или

  Set @Fraction = @Val - Round(@Val, 0) 
 SET @val = (@val - ROUND(@val, 0, 1) * 100) 

ROUND (@val, 0, 1) должен усекать 15,80 в 15,00. Затем вы вычтите 15 из 15.80 и умножьте 0.80 на 100, чтобы получить 80 в числовой форме.

Функция ROUND требует, чтобы третий параметр был установлен в 1, чтобы усечь число. В противном случае он будет конвертировать 15.80 в 16.00. См. http://msdn.microsoft.com/en-us/library/ms175003.aspx .

Для тех, кто хочет вернуть только дробное значение … (т. Е. Без десятичного числа) SQLMenace опубликовал отличный способ сделать это, используя PARSENAME из этой статьи: как получить только числа после десятичной

ВАЖНОЕ ЗАМЕЧАНИЕ перед использованием: если их нет в десятичном формате, SELECT PARSENAME ((22), 2) вернет NULL … И SELECT PARSENAME ((22), 1) вернет только целое число … Это можно легко обработать COALESCE или проверка нулевого модуля … но это может быть неприменимо во всех применениях

 SELECT PARSENAME((22.777),1) -- Returns ONLY The number after decimal SELECT PARSENAME((22.777),2) -- Returns ONLY The whole number