2016-08-30 2 views
0

Я использую следующую функцию для удаления лишних нецифровых символов из столбца.Функция SQL Server UDF должна удалить числа после десятичного числа

ALTER Function [dbo].[fnRemoveNonNumericCharacters](@strText VARCHAR(1000)) 
RETURNS VARCHAR(1000) 
AS 
BEGIN 
    WHILE PATINDEX('%[^0-9]%', @strText) > 0 
    BEGIN 
     SET @strText = STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '') 
    END 
    RETURN @strText 
END 

но если значение 99.35, это делает его 9935, но я хочу, чтобы это было 99

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

+0

Просто добавьте '. .'' в символы, которые разрешены. –

+0

u ean как этот '[^ 0-9.]' –

+0

, если я делаю это выше, он просто сохраняет десятичные знаки как '99.35' –

ответ

1

Если вы не беспокоитесь будет несколько десятичных точек/периодов. Вы можете комбинировать несколько комментариев и ответ Джона так:

ALTER Function [dbo].[fnRemoveNonNumericCharacters](@strText VARCHAR(1000)) 
RETURNS INT 
AS 
BEGIN 
    WHILE PATINDEX('%[^0-9.]%', @strText) > 0 
    BEGIN 
     SET @strText = STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '') 
    END 

    RETURN CAST(FLOOR(CAST(@strtext AS NUMERIC)) AS INT) 
END 
+0

Мне нужно int, я сделал изменения, чтобы вернуть мне INT –

+0

обновлен для возврата INT – Matt

0

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

SET @strText = LEFT(@strText,PATINDEX('%[^0-9]%', @strText) - 1) 

Примеры

DECLARE @strText VARCHAR(1000) 

SET @strText = '98,255465465' 
SET @strText = LEFT(@strText,PATINDEX('%[^0-9]%', @strText) - 1) 
SELECT @strText --98 

SET @strText = '97.2554,65465' 
SET @strText = LEFT(@strText,PATINDEX('%[^0-9]%', @strText) - 1) 
SELECT @strText --97 

SET @strText = '982/554.65465' 
SET @strText = LEFT(@strText,PATINDEX('%[^0-9]%', @strText) - 1) 
SELECT @strText --982 
0
Declare @String varchar(1000) = '99.35' 
Select floor(@String) 

Возвращает 99

Смежные вопросы