使用mysql和正则表达式模式转换和提取行

时间:2019-05-20 16:07:26

标签: mysql

如何从数据库中提取转换后的值?

SELECT name FROM clients LIMIT 1;

它将列出:“ 13's Automotors”

但是我想显示“ 13SAUTOMOTORS”,仅列出字母和数字,不带空格。

  

服务器类型:Percona服务器服务器版本:5.6.40-84.0-log-Percona   服务器(GPL),版本84.0,修订版47234b3协议版本:10

2 个答案:

答案 0 :(得分:1)

较新的版本(MySQL 8和MariaDB 10+)支持REGEXP_REPLACE()函数。

SELECT regexp_replace(name, '[^\\d\\w]', '') as converted_name
FROM clients

将所有非数字和非单词字符替换为空字符串。

如果需要大写的结果,请使用UPPER()

SELECT upper(regexp_replace(name, '[^\\d\\w]', '')) as converted_name
FROM clients

db<>fiddle demo

如果您的版本不支持REGEXP_REPLACE(),请考虑使用您的应用程序语言进行转换。由于您已经用mysqli标记了问题,因此我假设您正在使用PHP。然后,您可以使用pred_replace()strtoupper()

$row['converted_name'] = preg_replace('/[^\\d\\w]/', '', $row['name']);
$row['converted_name'] = strtoupper($row['converted_name']);

rextester demo

答案 1 :(得分:0)

在旧版本的MySQL中,您可以为此使用一堆嵌套的替换操作。

SELECT UPPER(REPLACE(REPLACE('3''s Automotors', ' ',''),'''','')) val

这有点讨厌,因为您需要为要删除的每个可能的字符使用嵌套的REPLACE,但这是可行的。

请注意,必须通过将MySQL查询中的字符串常量中的单引号字符'加倍来表示它们。因此,''''将单个字符'表示为字符串常量。