首页 > 解决方案 > PATINDEX 检测字母和六个数字

问题描述

SQL 服务器 2012。

表一

Id   name               number
1    py/ut/455656/ip     null
2    py/ut/jl/op         null
3    py/utr//grt         null

我想找回号码

 Id   name               number
1    py/ut/455656/ip     455656
2    py/ut/jl/op         null
3    py/utr//grt         null

这里是sql脚本

update table a 
set number=SUBSTRING(name,PATINDEX('py/u/[0-9]',name)+6,6)

我需要py/ut/. 如果有数字,该脚本运行良好。对于第二行,它正在交付jl/op

这个数字总是得到六个algarisms。

标签: sqltsqlsql-server-2012

解决方案


检查这个:

declare @Number nvarchar(20)='py/ut/455656/ip'



Declare @intAlpha int
SET @intAlpha = PATINDEX('%[^0-9]%', @Number )
BEGIN
WHILE @intAlpha > 0
BEGIN
SET @Number  = STUFF(@Number , @intAlpha, 1, '' )
SET @intAlpha = PATINDEX('%[^0-9]%', @Number  )
END
END
select @Number 

推荐阅读