如何在Azure SQL数据库中从URL提取Steam AppId
在Azure SQL数据库中提取Steam AppId并插入到目标表
需求说明
我有一个存储URL的表,数据示例如下,需要提取/app/后的数字(Steam AppId)并插入到另一个表的INT列中。这些数字后可能带有结尾斜杠或多余无关文本:
https://store.steampowered.com/app/123 https://store.steampowered.com/app/1234/ https://store.steampowered.com/app/1234567800/some_game_title/ https://store.steampowered.com/app/999https://baddata.com
期望提取结果:
123 1234 1234567800 999
实现方案
Azure SQL数据库支持REGEXP_SUBSTR函数,可基于正则表达式精准提取目标内容,具体操作如下:
1. 提取AppId的查询语句
使用REGEXP_SUBSTR匹配/app/后的连续数字,确保只提取有效数字部分:
SELECT REGEXP_SUBSTR(url_column, '\/app\/(\d+)', 1, 1, 'c', 1) AS steam_app_id FROM 你的源表名;
- 参数说明:
url_column:存储URL的列名'\/app\/(\d+)':正则表达式,匹配/app/后连续的数字(\d+确保至少匹配一个数字,比\d*更严谨)1, 1:从字符串第1位开始,取第1个匹配结果'c':区分大小写(此处不影响,可省略)1:返回第1个捕获组的内容(即括号内的数字)
2. 插入到目标表
将提取结果转换为INT类型后插入目标表,用INSERT...SELECT语句完成:
INSERT INTO 你的目标表名(app_id列名) SELECT CAST(REGEXP_SUBSTR(url_column, '\/app\/(\d+)', 1, 1, 'c', 1) AS INT) FROM 你的源表名 WHERE REGEXP_SUBSTR(url_column, '\/app\/(\d+)', 1, 1, 'c', 1) IS NOT NULL;
- 添加
WHERE子句是为了过滤未匹配到有效AppId的行,避免向INT列插入NULL导致报错
3. 特殊情况处理
针对https://store.steampowered.com/app/999https://baddata.com这类AppId后紧跟无关字符的URL,上述正则会自动在遇到非数字字符时停止匹配,准确提取出999。
内容的提问来源于stack exchange,提问作者Peter Mercury
相关产品推荐
相关产品推荐

