如何提取SQL字段内的数字?
字段内数据由字母数字混合组成,如何提取出字段内的数字?
引用 皆我百晓生 小程序回复内容作答:
在 SQL 中,可以使用正则表达式来提取字段内的数字。具体的方法会因使用的数据库类型而有所不同,在以下两种常见的数据库中分别介绍。
MySQL:
可以使用 REGEXP_REPLACE
函数,结合正则表达式 (\\D)
来删除字段内的非数字字符,然后再将结果转换为数字类型,例如:
SELECT CAST(REGEXP_REPLACE(field, '\\D', '') AS UNSIGNED) AS extracted_number
FROM table_name;
PostgreSQL:
可以使用 regexp_replace
函数,结合正则表达式 (\D)
来删除字段内的非数字字符,然后再将结果转换为数字类型,例如:
SELECT CAST(regexp_replace(field, '\D', '', 'g') AS INTEGER) AS extracted_number
FROM table_name;
请将上述的 field
替换为需要提取数字的字段名称,table_name
替换为数据所在的表名。
【相关推荐】
我之前讲到过索引不是万能的,有一些情况是不需要创建索引的,这里再进行一下说明。
WHERE 条件(包括 GROUP BY、ORDER BY)里用不到的字段不需要创建索引,索引的价值是快速定位,如果起不到定位的字段通常是不需要创建索引的。举个例子:
|
因为我们是按照 user_id 来进行检索的,所以不需要对其他字段创建索引,即使这些字段出现在 SELECT 字段中。
第二种情况是,如果表记录太少,比如少于 1000 个,那么是不需要创建索引的。我之前讲过一个 SQL 查询的例子(第 23 篇中的 heros 数据表查询的例子,一共 69 个英雄不用索引也很快),表记录太少,是否创建索引对查询效率的影响并不大。
第三种情况是,字段中如果有大量重复数据,也不用创建索引,比如性别字段。不过我们也需要根据实际情况来做判断,这一点我在之前的文章里已经进行了说明,这里不再赘述。
最后一种情况是,频繁更新的字段不一定要创建索引。因为更新数据的时候,也需要更新索引,如果索引太多,在更新索引的时候也会造成负担,从而影响效率。