忙表上的循环将不太可能充分执行。使用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))))
我工作的东西多一点效率比在两步PROC概述ess,给我几分钟。 – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 2012-02-10 02:28:02
@zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz - 我等着憋气。 :) – RPM1984 2012-02-10 02:29:12
让我知道你的想法。 – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 2012-02-10 03:07:38