T-Sql查询清理varchar列

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)

换句话说,我想保留初始数字和最后一个字.我使用的是SUBSTRINGCHARINDEX,但这些功能去掉一切,直到字符串的结尾,我不知道我需要删除部分的长度.

有什么建议?

谢谢

And*_*mar 6

您可以在子查询中搜索第一个非数字和第一个空格.如果位数不完全是四,那也可以:

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)