String 查找并选择SQL字符串的一部分

String 查找并选择SQL字符串的一部分,string,sql-server-2008,find,String,Sql Server 2008,Find,我正在使用SQL Server,我想创建一个列(Temp),该列使用另一个字符串(Description)的一部分。我想从描述中检索GB信息: “描述”字段可以如下所示: “废话废话100GB废话”-我对“100GB”感兴趣 问题是字符串中的GB数量和位置可能会有所不同 我建议您为此使用正则表达式,但您还需要使用CLR函数。但是,您可以指定要使用的确切正则表达式,以便更精确 如果您想要一个“更简单”的解决方案,也许还可以使用PATINDEX来查找“GB”的索引。字符串上的唯一数字是100吗(或

我正在使用SQL Server,我想创建一个列(Temp),该列使用另一个字符串(Description)的一部分。我想从描述中检索GB信息:

“描述”字段可以如下所示:
“废话废话100GB废话”
-我对
“100GB”感兴趣


问题是字符串中的GB数量和位置可能会有所不同

我建议您为此使用正则表达式,但您还需要使用CLR函数。但是,您可以指定要使用的确切正则表达式,以便更精确

如果您想要一个“更简单”的解决方案,也许还可以使用PATINDEX来查找“GB”的索引。字符串上的唯一数字是100吗(或者你还可以有更多的数字?)


本例适用于您的示例,但如果格式因某种原因不同(没有数字或有2个数字等),则不适用。

谢谢您的评论。是的,这是我的问题之一,这个领域可以包含所有类型的信息,这里有来自db的两个例子:“宽带接入计划50GB”和“iPad平板电脑3GB$50”。如果我可以搜索GB,然后从该位置选择x个字符,直到第一个立即数空格。在这种情况下,我认为您需要使用CLR函数:(然后创建一个正则表达式“([0-9]+)GB”,在这种情况下,$1将只返回数字sorry,应该是这个:select dbo.RegExReplace(@string,(.*)([0-9]+)GB(.*),“$2”)你可以像我之前写的那样“取第一个数字”,然后取我们在数字和“GB”之间的值,但是,对于类似这样的东西:“废话废话100废话150GB”需要“100废话150”问题是,我们不知道“有多少个字符”我们需要采取之前,它可以是“3GB”或它可以是“150GB”…谢谢你告诉我如何解决这个问题。我正在阅读你的博客,希望能够解决我的问题后,我了解了更多的CLR功能!
declare @string nvarchar(100) = 'blah blah blah 100GB blah'

select SUBSTRING(@string,  PATINDEX('%[0-9]%', @string), PATINDEX('%GB%', @string)-PATINDEX('%[0-9]%', @string))