Sql server 2012 SQL在两个空格之间选择,如果只有一个空格,则在第一个空格之后选择所有空格

Sql server 2012 SQL在两个空格之间选择,如果只有一个空格,则在第一个空格之后选择所有空格,sql-server-2012,substring,Sql Server 2012,Substring,我有一个列,其中包含一个组的描述,每一行看起来像下面两个选项中的一个,用不同数量的单词和/或数字代替废话: bla1h bla2h blah blah Group 18956 blah bl4ah blah Group 189 bla5h 我需要提取词组后面的数字 我能想出以下代码: SUBSTRING(R.GroupDescription,CHARINDEX('Group ',R.GroupDescription),20) 这将在以下情况之一对其进行修剪: Group 18956 Grou

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

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
在此之后,我需要对其进行进一步的修剪,以便能够产生以下代码,这要归功于:

这段代码既麻烦又只适用于第一个示例中上面的第二个示例,在第一个示例中,在我想要的数字集之后没有任何内容,因此它不会返回任何内容

另外,这其中真正有趣的部分是需要返回结果才能连接到另一个表


我将SSMS 2012与SQL Server 2012后端一起使用

单向假设有一个
,后面总是跟一个数字:

;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


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

CREATE FUNCTION strip_function (@value VARCHAR(200)) 
RETURNS VARCHAR(200)
AS 
BEGIN

WHILE PATINDEX('%[^0-9]%', @value) > 0 
SET @value = REPLACE(@value, SUBSTRING(@value, PATINDEX('%[^0-9]%', @value),1),'')

RETURN @value 
END 
GO 

SELECT dbo.strip_function(your_column)
FROM your_table 

是,文本字符串中只有一个组。然而,我需要检索的信息是它后面的数字。该数字的长度可以从4到7个数字不等,我将使用该结果形成到另一个表的联接。我无法让你的代码为我工作。但是感谢您的尝试。这是可行的,但我不确定如何将结果用作另一个表的联接。表R应该连接R上的表G.results from above=G.GroupId这很有帮助,但并不能解决所有问题,因为在blah的表中可能包含数字之前,我没有说过这一点。但是你不知道我很抱歉。我将编辑该问题,将其作为一种可能性。这个答案仍然有用。
VAL
18956
189
CREATE FUNCTION strip_function (@value VARCHAR(200)) 
RETURNS VARCHAR(200)
AS 
BEGIN

WHILE PATINDEX('%[^0-9]%', @value) > 0 
SET @value = REPLACE(@value, SUBSTRING(@value, PATINDEX('%[^0-9]%', @value),1),'')

RETURN @value 
END 
GO 

SELECT dbo.strip_function(your_column)
FROM your_table