我想知道从表示百分比的字符中提取数字的最简单方法是什么。例如,我有
Google, 15%
Uber, 25%
我想要一个按名称返回平均费率组的查询
keystore.lnk
答案 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:
答案 2 :(得分:0)
以下正则表达式应该使用数字条带化部分。在JS中,这就是它的工作原理。
var text = "name, rate\nGoogle, 10%\nGoogle, 20%\nUber, 25%",
rex = /\d+(?=%)/g,
res = text.match(rex); //<- ["10", "20", "25"]