从sql中的字符串中提取数字并执行计算

时间:2016-03-26 03:43:46

标签: sql regex

我想知道从表示百分比的字符中提取数字的最简单方法是什么。例如,我有

Google, 15%
Uber, 25%

我想要一个按名称返回平均费率组的查询

keystore.lnk

3 个答案:

答案 0 :(得分:2)

我是正则表达式的粉丝,但在这种情况下你不需要它,这里有一个使用原生函数的替代方法,带有你的样本数据:

WITH nameandrate AS (
   SELECT 'Google, 10%' AS namerate
   UNION ALL SELECT 'Google, 20%' AS namerate
   UNION ALL SELECT 'Uber, 25%' AS namerate
),

split1 AS (
    SELECT namerate, CHARINDEX(', ', namerate) AS position
    FROM nameandrate
),

split2 AS (
    SELECT LEFT(namerate, position - 1) AS name,
           CAST(
             SUBSTRING(namerate, position + 2, LEN(namerate)-position-2)
             AS int
           ) AS rate
    FROM split1
)

SELECT   name, CAST(AVG(rate) AS varchar(100)) + '%'
FROM     split2
GROUP BY name

答案 1 :(得分:0)

您可以使用此正则表达式进行提取;

([a-z]+\,[\s]*[\d]+\%) 

使用InCaseSensitive比较。

您可以参考以下链接,了解如何在Sql中使用Regex:

Regular Expressions in MS SQL Server 2005/2008

Create and Run a CLR SQL Server User-Defined Function

答案 2 :(得分:0)

以下正则表达式应该使用数字条带化部分。在JS中,这就是它的工作原理。

var text = "name, rate\nGoogle, 10%\nGoogle, 20%\nUber, 25%",
     rex = /\d+(?=%)/g,
     res = text.match(rex); //<- ["10", "20", "25"]