Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie entferne ich nachgestellte Zahlen aus einer Zeichenfolge?

Diese Lösung sollte etwas effizienter sein, da sie zuerst überprüft, ob die Zeichenfolge eine Zahl enthält, und dann überprüft, ob die Zeichenfolge mit einer Zahl endet.

 CREATE FUNCTION dbo.trim_ending_numbers(@columnvalue AS VARCHAR(100)) RETURNS VARCHAR(100)
    BEGIN
    --This will make the query more efficient by first checking to see if it contains any numbers at all
    IF @columnvalue NOT LIKE '%[0-9]%'
        RETURN @columnvalue

    DECLARE @counter INT
    SET @counter = LEN(@columnvalue)

    IF ISNUMERIC(SUBSTRING(@columnvalue,@counter,1)) = 0
        RETURN @columnvalue 

    WHILE ISNUMERIC(SUBSTRING(@columnvalue,@counter,1)) = 1 OR SUBSTRING(@columnvalue,@counter,1) = ' '
    BEGIN
        SET @counter = @counter -1
        IF @counter < 0
            BREAK
    END
    SET @columnvalue = SUBSTRING(@columnvalue,0,@counter+1)

    RETURN @columnvalue
    END

Wenn Sie laufen

SELECT dbo.trim_ending_numbers('More blah 12321 123123 123132')

Es wird zurückkehren

'More blah'