我有一个列,其中包含一个组的描述,每一行看起来像下面的两个选项,其中包含不同数量的单词和/或数字代替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后端。
答案 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("")]