sql-server-2012 - SQL 在两个空格之间选择,或者在第一个空格之后的所有内容之间选择(如果只有一个)

标签 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
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/

相关文章:

sql-server - 什么更快 : SUM over NULL or over 0?

sql-server - 如何跳过合并复制中的架构更改

c - 如何查找字符串中子字符串的所有出现次数和所有位置?

MySQL:如果字符串末尾看起来像 'BV' UPDATE

c++ - 在 C++ 中拆分字符串的更快方法

SQL 服务器 2012 : A way to see if the database has been tampered with?

tsql - 检查表是否包含具有特定列值的行

sql-server - 检查 SQL 中十六进制的最后一位

java - 一年中的编程作业月份

swift - 将 unicode 字符串截断为最大字节