如何解除连接字段

Joe*_*Joe 1 sql t-sql sql-server

我在SQL Server数据库中有一个字段,基本上是两个连接在一起的字段.它有一个描述符和一个数字.我想用一个数字构建一个视图,以便我可以将它与其他表相关联.该数字实际上是在其他表上键入的nvarchar.所以从这样的数据我只想查询数字部分:

带有值的ProgramField:

tst_desc:1
tst_desc:124
tst_desc:1495
tst_desc:20483
Run Code Online (Sandbox Code Playgroud)

所以我想我的查询返回一个结果:

ProgramNumField

1
124
1495
20483
Run Code Online (Sandbox Code Playgroud)

随着时间的推移,该数字的长度可变,并且需要为nvarchar,因此我可以将其与数据库中的其他表相关联.

在此输入图像描述

And*_*yev 7

如果你的前缀总是tst_desc:那么你可以简单地剥离它replace:

select
    replace(ProgramField, 'tst_desc:', '') as ProgramNum
from yourTable
Run Code Online (Sandbox Code Playgroud)

如果前缀可以不同但始终用冒号与值分隔,则可以使用以下内容:

select
    right(ProgramField, len(ProgramField) - charindex(':', ProgramField)) as ProgramNum
from yourTable
Run Code Online (Sandbox Code Playgroud)


t-c*_*.dk 5

最简单的方法是使用STUFF

SELECT STUFF(ProgramField, 1, charindex(':', ProgramField), '')
FROM yourtable
Run Code Online (Sandbox Code Playgroud)

如果您的某些行中有多个冒号的脏数据或冒号丢失,您可以从右向左搜索第一个无数字字符,您可以使用此方法,这可以处理各种有趣的数据:

SELECT
  STUFF(RIGHT('@'+ProgramField, PATINDEX('%[^0-9]%',REVERSE(ProgramField)+'@')),1,1,'')
Run Code Online (Sandbox Code Playgroud)