如何从数据库中提取转换后的值?
SELECT name FROM clients LIMIT 1;
它将列出:“ 13's Automotors”
但是我想显示“ 13SAUTOMOTORS”,仅列出字母和数字,不带空格。
服务器类型:Percona服务器服务器版本:5.6.40-84.0-log-Percona 服务器(GPL),版本84.0,修订版47234b3协议版本:10
答案 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
如果您的版本不支持REGEXP_REPLACE()
,请考虑使用您的应用程序语言进行转换。由于您已经用mysqli
标记了问题,因此我假设您正在使用PHP。然后,您可以使用pred_replace()
和strtoupper()
:
$row['converted_name'] = preg_replace('/[^\\d\\w]/', '', $row['name']);
$row['converted_name'] = strtoupper($row['converted_name']);
答案 1 :(得分:0)
在旧版本的MySQL中,您可以为此使用一堆嵌套的替换操作。
SELECT UPPER(REPLACE(REPLACE('3''s Automotors', ' ',''),'''','')) val
这有点讨厌,因为您需要为要删除的每个可能的字符使用嵌套的REPLACE,但这是可行的。
请注意,必须通过将MySQL查询中的字符串常量中的单引号字符'
加倍来表示它们。因此,''''
将单个字符'
表示为字符串常量。