SQL在两个空格之间选择,或者在第一个之后选择所有内容

时间:2016-02-26 16:29:05

标签: sql-server-2012 substring

我有一个列,其中包含一个组的描述,每一行看起来像下面的两个选项,其中包含不同数量的单词和/或数字代替blah:

bla1h bla2h blah blah Group 18956
blah bl4ah blah Group 189 bla5h

我需要在单词组之后提取数字。

我能够提出这段代码:

SUBSTRING(R.GroupDescription,CHARINDEX('Group ',R.GroupDescription),20)

这将修剪下面的一个:

Group 18956
Group 189 blah

在此之后我需要进一步修改它以便我能够通过This post得到以下代码:

LEFT(SUBSTRING(SUBSTRING(R.GroupDescription,CHARINDEX('Group ',R.GroupDescription),20),CHARINDEX(' ',SUBSTRING(R.GroupDescription,CHARINDEX('Group ',R.GroupDescription),20)) +1,LEN(SUBSTRING(R.GroupDescription,CHARINDEX('Group ',R.GroupDescription),20))),CHARINDEX(' ',SUBSTRING(SUBSTRING(R.GroupDescription,CHARINDEX('Group ',R.GroupDescription),20), CHARINDEX(' ', SUBSTRING(R.GroupDescription,CHARINDEX('Group ',R.GroupDescription),20)) +2, LEN(SUBSTRING(R.GroupDescription,CHARINDEX('Group ',R.GroupDescription),20)))))

这段代码既繁琐又只适用于第一个例子中的第二个例子,其中在我想要的数字集之后没有任何内容它什么也没有返回。

另外,真正有趣的部分是返回到另一个表时需要返回的结果。

我正在使用SSMS 2012和SQL Server 2012后端。

2 个答案:

答案 0 :(得分:2)

假设有一个Group后跟一个数字的一​​种方式:

;WITH R(GroupDescription) AS (
    SELECT 'blah blah blah blah Group 18956' UNION
    SELECT 'blah blah blah Group 189 blah' 
)
SELECT LEFT(T.F, CHARINDEX(' ', T.F + ' ') - 1) VAL
FROM (SELECT
    SUBSTRING(R.GroupDescription, CHARINDEX('Group ',R.GroupDescription) + 6, LEN(R.GroupDescription)) F
    FROM R) T
VAL
18956
189

答案 1 :(得分:0)

听起来你会受益于一个函数,它将从你的长字符串中删除所有非0-9字符。这将只留下数字然后你可以加入你的表。

["field1":Optional(20), "field2": Optional("")]