sql >> Databasteknik >  >> RDS >> Sqlserver

Hur tar man bort eventuella efterföljande nummer från en sträng?

Den här lösningen borde vara lite mer effektiv eftersom den först kontrollerar om strängen innehåller ett nummer, sedan kontrollerar den om strängen slutar på ett nummer.

 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

Om du kör

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

Den kommer tillbaka

'More blah'


  1. Måste SQL-anslutningar som öppnas med PDO i PHP stängas

  2. Mysql Välj ömsesidiga par av poster, utan dubbletter

  3. SQL Server Express-alternativ över 2GB-gränsen

  4. Symfony 3 - Ett undantag inträffade i drivrutinen:kunde inte hitta drivrutinen