如何解除连接字段

时间:2016-02-03 13:41:11

标签: sql sql-server tsql

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

带有值的ProgramField:

<input type="number" value="0" id="newInput">
<button id="showSum">Show Results</button>
<br>
<div id="result"></div>

所以我希望我的查询返回结果:

ProgramNumField

tst_desc:1
tst_desc:124
tst_desc:1495
tst_desc:20483

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

enter image description here

3 个答案:

答案 0 :(得分:7)

如果您的前缀始终为tst_desc:,那么您可以使用replace将其删除:

select
    replace(ProgramField, 'tst_desc:', '') as ProgramNum
from yourTable

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

select
    right(ProgramField, len(ProgramField) - charindex(':', ProgramField)) as ProgramNum
from yourTable

答案 1 :(得分:5)

最简单的方法是使用STUFF

SELECT STUFF(ProgramField, 1, charindex(':', ProgramField), '')
FROM yourtable

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

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

答案 2 :(得分:1)