我有以下查询:
SELECT `mmetal`.`id`, `mmetal`.`name`, `steelmarks`.`EN`, `steelmarks`.`DIN` FROM `mmetal` LEFT JOIN `steelmarks` ON `mmetal`.`id`=`steelmarks`.`id` WHERE REPLACE(REPLACE(REPLACE(REPLACE(`name`,' ',''),'\)',''),'\(',''),'-','') LIKE '%something%'
(替换 - 替换名称栏中的“”、“(”、“)”、“-”)
1) Steelmarks 表大约有 15 列 - 我需要替换
`mmetal`.`id`, `mmetal`.`name`, `steelmarks`.`EN`, `steelmarks`.`DIN`,`steelmarks`.`column3`,...,...,...`
类似的东西
`mmetal`.`id`, `mmetal`.`name`, `steelmarks`.*
但它不起作用
2) 我希望将 LIKE 函数与 REPLACE 一起使用到所有选定的列除了 id
列表,而不仅仅是“名称”。像这样的东西:
WHERE REPLACE(REPLACE(REPLACE(REPLACE(ALL COLUMNS,' ',''),'\)',''),'\(',''),'-','') LIKE '%something%'
现在我需要使用
WHERE REPLACE...column1 LIKE %something% OR REPLACE...column2 LIKE %something% OR REPLACE...column3 LIKE %something% OR ...
请问您对我的问题有什么建议吗?
最佳答案
replace 和 like 运算符一次仅对一列进行操作。以下内容可能会满足您的要求,但您仍然必须列出所有列:
REPLACE(REPLACE(REPLACE(REPLACE(concat_ws('|', col1, col2, col3, . . . ),' ',''),'\)',''),'\(',''),'-','') LIKE '%something%'
这会将值与分隔符连接在一起。
或者,您可以使用以下内容查询 INFORMATION_SCHEMA.COLUMNS
:
select concat(replace(<YOUR EXPRESSION HERE>, 'col1', c.column_name), ' and')
from information_schema.columns c
where table_name = YOURTABLEHERE
然后使用结果构建您的查询。
关于Mysql - 选择 table1.something, table2.* WHERE 替换所有列,如 %something%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23711745/