我有一列包含一个组的描述,每行看起来类似于下面两个选项中的一个,并用不同数量的单词和/或数字代替废话:
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)))))
这段代码既麻烦又只适用于上面第一个示例中的第二个示例,其中在我想要的数字集之后没有任何内容,它什么也不返回。
此外,真正有趣的部分是返回的结果将需要与另一个表进行联接。
我正在使用带有 SQL Server 2012 后端的 SSMS 2012。
最佳答案
假设有一个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
关于sql-server-2012 - SQL 在两个空格之间选择,或者在第一个空格之后的所有内容之间选择(如果只有一个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35656896/