使用SQL从字段中选择1个单词

使用SQL从字段中选择1个单词,sql,sql-server,substring,Sql,Sql Server,Substring,我需要从列中提取“SRN=123”(123在长度上是动态的,SRN=是一致的)。数据可以是任何东西,没有一致的格式 456 lorem-SRN=123和一些 更多事情3 我在尝试使用charindex查找SRN=123的终点以获取长度时遇到问题,有什么帮助吗 SUBSTRING(t.Instructions, CharIndex('SRN=', t.Instructions) + 10,

我需要从列中提取“SRN=123”(123在长度上是动态的,SRN=是一致的)。数据可以是任何东西,没有一致的格式

456 lorem-SRN=123和一些 更多事情3

我在尝试使用charindex查找SRN=123的终点以获取长度时遇到问题,有什么帮助吗

SUBSTRING(t.Instructions, 
                             CharIndex('SRN=', t.Instructions) + 10, 
                             (CHARINDEX('SRN=', t.Instructions )-(CharIndex('SRN=[^0-9.-]', t.Instructions) + 10)))

对不起。。。错过了您想要的SRN=12345

DECLARE @STRING VARCHAR(1000)
SELECT @STRING = '456 lorem limpsump SRN=123456 and some more things 3.'
SELECT SUBSTRING(@STRING, CHARINDEX('SRN=', @string, 0), CHARINDEX(' ', @string, CHARINDEX('SRN=', @string, 0)) - CHARINDEX('SRN=', @string, 0))

做一个巨大的假设,在你需要的字符串的末尾有一个空格

declare @str as varchar(100)
set @str='456 lorem limpsump SRN=123 and some more things 3'

--for testing, find the starting point
select charindex('SRN=',@str)

--for testing, find the ending point
select charindex(' ',@str,charindex('SRN=',@str))

--find your substring 
select substring(@str,charindex('SRN=',@str),charindex(' ',@str,charindex('SRN=',@str))-charindex('SRN=',@str))
这很有效

with t as(
select '456 lorem limpsump SRN=12378 and some more things 3.' as col )

select substring(col,charindex('SRN=',col)+4,
charindex(' ',col,charindex('SRN=',col))-charindex('SRN=',col)-4)
from t

您指的是哪种sql?答案可能会根据您所使用的内容(oracle、msql等)而改变。如果123部分是动态长度,是否有需要获取的字符串结尾的指示符?SRN=xxxxxx部分的末尾是否始终有空格?子字符串本身是否可以包含空格?看起来您正在使用SQL Server,如果是2005或更高版本,最好是通过CLR UDF使用正则表达式来提取数据。。检查您可以很容易地找到SRN=的开始位置,但是如果=符号右侧的数字是可变长度的,您如何知道它何时结束?数字是否包含空格?是数字还是字母数字?当您说“数据可以是任何东西”时,您是指=符号右侧的值吗?使用SQL 2008,SRN=XXXX,xxx将始终是数字,后面可能有一个空格,或者可能是返回“456-SRN=123456”的字段结尾,如果有空格,有没有可能出现有/没有空格的东西?@Tim Boland作为一个人,如果不是因为空格,你怎么知道事情什么时候结束?在询问我们如何编写实现该知识的代码之前,您需要解释您如何知道字符串的SRN部分已结束。@Chris,它可能是空白或结尾field@Tim它本来打算在帕丁德斯的回归中使用a-1。立即测试。没有骰子,获取一个无效的长度参数,该参数传递给我试图测试的左或子字符串函数:declare@S varchar(100)='456 lorem SRN=123'
select 'SRN='+left(stuff(@S, 1, charindex('SRN=', @S)+3, ''), patindex('%[^0-9]%', stuff(@S, 1, charindex('SRN=', @S)+3, '')+' ')-1)