Цикл на занятом столе вряд ли будет работать адекватно.Используйте REVERSE и PATINDEX, чтобы найти первую не цифру, начните там SUBSTRING, затем ОБРАТИТЕ результат.Это будет очень медленно без циклов.
Ваши примеры подразумевают, что вы также не хотите совпадать с пробелами.
DECLARE @t TABLE (s NVARCHAR(500))
INSERT INTO @t (s)
VALUES
('Hi there how are you'),('What is the #1 pizza place in NYC?'),('Dominoes is number 1'),('Blah blah 123123'),('More blah 12321 123123 123132')
select s
, reverse(s) as beginning
, patindex('%[^0-9 ]%',reverse(s)) as progress
, substring(reverse(s),patindex('%[^0-9 ]%',reverse(s)), 1+len(s)-patindex('%[^0-9 ]%',reverse(s))) as [more progress]
, reverse(substring(reverse(s),patindex('%[^0-9 ]%',reverse(s)), 1+len(s)-patindex('%[^0-9 ]%',reverse(s)))) as SOLUTION
from @t
Окончательный ответ: обратный (подстрока (обратная (@s)), patindex ('% [^ 0-9]%', обратный (@s)), 1 + len (@s) - patindex ('% [^ 0-9]%', обратный (@s))))