如何从字符串中删除任何尾随数字?

RPM*_*984 7 t-sql string sql-server-2008

样本输入:

"嘿,你好吗"

"纽约市排名第一的披萨店是什么?"

"多米诺骨牌排名第一"

"Blah blah 123123"

"更多blah 12321 123123 123132"

预期产量:

"嘿,你好吗"

"纽约市排名第一的披萨店是什么?"

"多米诺骨牌就是数字"

"Blah blah"

"更多等等"

我认为这是一个两步过程:

  1. 将整个字符串拆分为字符,每个字符一行(包括空格),顺序相反
  2. 循环通过,如果它是空格或数字,则跳过,否则添加到另一个数组的开头.

我应该得到理想的结果.

我可以想到一些快速而肮脏的方法,但这需要执行得相当好,因为它是一个在繁忙的桌子上运行的触发器,所以我想把它扔给T-SQL专业人员.

有什么建议?

zzz*_*zzz 5

这个解决方案应该更有效一点,因为它首先检查字符串是否包含数字,然后检查字符串是否以数字结尾。

 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
Run Code Online (Sandbox Code Playgroud)

如果你跑

SELECT dbo.trim_ending_numbers('More blah 12321 123123 123132')
Run Code Online (Sandbox Code Playgroud)

它会回来

'More blah'
Run Code Online (Sandbox Code Playgroud)