返回所有单词的查询,忽略一个单词

问题描述 投票:0回答:2

我有这张表,其中包含以下记录:

CREATE TABLE `t_vias` (
`id` int(11) NOT NULL,
`cpro` varchar(2) NOT NULL,
`cmum` varchar(3) NOT NULL,
`cpos` varchar(5) NOT NULL,
`mun` varchar(75) NOT NULL,
`via` varchar(100) NOT NULL);
 
     
INSERT INTO t_vias VALUES
("6021","28","079","28016","MADRID","GOYA, FRANCISCO DE"),
("6022","28","079","28016","MADRID","FRANCISCO GOYA"),
("6896","28","079","28001","MADRID","GOYA, DE"),
("6897","28","079","28001","MADRID","GOYA (DE)"),
("6900","28","079","28001","MADRID","CALLE GOYA"),
("6901","28","079","28001","MADRID","CALLE DE GOYA");

我从 php 变量接收值“CALLE DE GOYA”,并且我在查询中包含变量值:

SELECT * FROM `t_vias` WHERE via ='CALLE DE GOYA'; 

结果只显示一条记录:

id  cpro    cmum    cpos    mun     via     
6901    28  079     28001   MADRID  CALLE DE GOYA

既然来了,就可以了。但如果我想显示所有带有“GOYA”字样的寄存器(删除CALLE、DE等):

SELECT * FROM `t_vias` WHERE via ='%GOYA%'; 
 id     cpro    cmum    cpos    mun     via     
6021    28  079     28016   MADRID  GOYA, FRANCISCO DE
6022    28  079     28016   MADRID  FRANCISCO GOYA
6896    28  079     28001   MADRID  GOYA, DE
6897    28  079     28001   MADRID  GOYA (DE)
6900    28  079     28001   MADRID  CALLE GOYA
6901    28  079     28001   MADRID  CALLE DE GOYA

没关系,用 GOYA 返回所有条目。

问题是如果变量的值是这样的:'DE GOYA'

然后查询:

SELECT * FROM `t_vias` WHERE via LIKE '%DE GOYA%'; 

id  cpro    cmum    cpos    mun     via     
6901    28  079     28001   MADRID  CALLE DE GOYA

仅返回一条记录。如果没有 DE,(DE) 如果包含它,我如何搜索变量值?

sql mysql sql-like
2个回答
0
投票

我建议去正则表达式

SELECT * FROM `t_vias` WHERE via regexp "GOYA";

0
投票
SELECT * FROM Test WHERE name LIKE CONCAT('%',REPLACE('DE GOYA', 'DE ', ''), '%');

这个怎么样?您可以将“DE GOYA”替换为“GOYA”或“GOYA DE”。这将从 DE GOYA -> GOYA 中删除 DE 并将其与所有记录匹配(因此它将找到 GOYA、DE GOYA、GOYA DE、DEGOYADE、GOYADE 等。

© www.soinside.com 2019 - 2024. All rights reserved.