首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql like查询跳过特殊字符

Mysql like查询跳过特殊字符
EN

Stack Overflow用户
提问于 2018-02-10 14:05:55
回答 2查看 945关注 0票数 0

SQL:

代码语言:javascript
复制
SELECT * FROM `item` WHERE `English_name` LIKE '%FL7%'

数据:

代码语言:javascript
复制
FL-710 FLOWER
FL-711 FLOWER
FL-712 FLOWER
FL-713 FLOWER
FL-693 FLOWER
FL71 FLOWER
FL69 FLOWER

输出:

代码语言:javascript
复制
FL71 FLOWER

预期输出:

代码语言:javascript
复制
FL-710 FLOWER
FL-711 FLOWER
FL-712 FLOWER
FL-713 FLOWER
FL71 FLOWER

任何人都可以告诉我如何才能达到预期的输出。我不想扫描特殊字符。如果like查询不包含任何特殊字符。

EN

回答 2

Stack Overflow用户

发布于 2018-02-10 14:11:03

使用正则表达式:

代码语言:javascript
复制
SELECT * FROM `item` WHERE `English_name` RLIKE 'FL-?7'

-?表示-是可选的。

更新

如果要忽略列中的任何特殊字符,则需要将它们全部从值中删除。

对于MySQL 8或MariaDB 10.2,您可以使用REGEXP_REPLACE

代码语言:javascript
复制
SELECT * FROM `item` WHERE REGEXP_REPLACE(`English_name`, '\\W', '') RLIKE 'FL7'

REGEXP_REPLACE(English_name, '\\W', '')将只保留字母数字字符和下划线(_)。

如果你想要更多的控制,你需要列出所有必须删除的字符。例如:如果您想忽略"+“、"-”和“”。“您将使用

代码语言:javascript
复制
SELECT * FROM `item` WHERE REGEXP_REPLACE(`English_name`, '[-+.]', '') RLIKE 'FL7'

请注意,有些字符是非常特殊的(-:表示正则表达式,需要使用双反斜杠进行转义。如果你不知道这些字符是什么,你可以将它们全部转义。

有些字符甚至更特殊:要在单引号字符串中使用单个queto,需要编写两次('')。要使用反斜杠,你需要写四次(\\\\)。

忽略"+“、"-”、".“、"'”、"?“和"\“你需要

代码语言:javascript
复制
SELECT *
FROM `item`
WHERE REGEXP_REPLACE(`English_name`, '[\\+\\-\\.\\''\\?\\\\]', '') RLIKE 'FL7'

你会得到这样的结果:

代码语言:javascript
复制
FL-710 FL_OWER
F+L711 FLOWER
F\L.712 FLOWER
FL'713 FLOWER
FL71 FLOWER

MariaDB 10.2 Demo

但是,如果不能使用REGEXP_REPLACE,则需要在嵌套的REPACE表达式中逐个替换所有字符。要仅删除"-“和"+”,您可以使用

代码语言:javascript
复制
SELECT *
FROM `item`
WHERE REPLACE(REPLACE(English_name, '-', ''), '+', '') RLIKE 'FL7'

要删除的字符越多,表达式就越复杂。但是您可以编写一个函数remove_special_chars(),在其中您可以使用过程编程来获得更具可读性的代码:

代码语言:javascript
复制
CREATE FUNCTION remove_special_chars(str TEXT)
RETURNS TEXT
LANGUAGE SQL
DETERMINISTIC
NO SQL
BEGIN
    SET str = REPLACE(str, '-', '');
    SET str = REPLACE(str, '+', '');
    SET str = REPLACE(str, '*', '');
    SET str = REPLACE(str, '/', '');
    SET str = REPLACE(str, '.', '');
    SET str = REPLACE(str, '''', '');
    SET str = REPLACE(str, '\\', '');
    -- add more 
    RETURN str;
END

那么您的查询将是

代码语言:javascript
复制
SELECT * FROM `item` WHERE remove_special_chars(`English_name`) RLIKE 'FL7'
票数 0
EN

Stack Overflow用户

发布于 2018-02-10 17:26:14

尝试以下查询:

代码语言:javascript
复制
SELECT * FROM `item` WHERE `English_name` LIKE  'FL%'

只有当你所有的录音都以"FL“开头时,这才能起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48717793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档