del*_*ave 4 t-sql string sql-server-2005
我的一个varchar表中有一个列,其数据如下:
1234abc
1234abcde456757
1234abc Supervisor
1234abc456 Administrator
Run Code Online (Sandbox Code Playgroud)
我想通过删除紧随其后的任何字母和数字来"清理它",所以对于我想要的上述示例:
1234
1234
1234 Supervisor
1234 Administrator
Run Code Online (Sandbox Code Playgroud)
换句话说,我想保留初始数字和最后一个字.我使用的是SUBSTRING和CHARINDEX,但这些功能去掉一切,直到字符串的结尾,我不知道我需要删除部分的长度.
有什么建议?
谢谢
您可以在子查询中搜索第一个非数字和第一个空格.如果位数不完全是四,那也可以:
declare @t table (col1 varchar(50))
insert into @t select '12abc'
union all select '1234abcde456757'
union all select '1234abc Supervisor'
union all select '1234abc456 Administrator'
union all select '123456abc456 Administrator'
select case when FirstNonDigit = 0 then col1
when FirstSpace = 0 then substring(col1, 1, FirstNonDigit-1)
else substring(col1, 1, FirstNonDigit-1) +
substring(col1, FirstSpace, len(col1) - FirstSpace + 1)
end
from (
select patindex('%[^0-9]%', col1) FirstNonDigit
, patindex('% %', col1) FirstSpace
, col1
from @t
) subqueryalias
Run Code Online (Sandbox Code Playgroud)
- >
12
1234
1234 Supervisor
1234 Administrator
123456 Administrator
Run Code Online (Sandbox Code Playgroud)