小编典典

MySQL查询在表的所有列中搜索字符串

sql

我不知道如何安装尽可能可移植的SQL,以查询表中所有列的特定短语,例如:

ID | Name           | text      | Date       | Author  | Status
1  | Augusto Weiand | Test text | 2010-01-01 | Deividi | 1

询问

SELECT * 
FROM table 
WHERE columns LIKE '%augusto%2010%text%"

对不起,我没有做足够的详细说明,我想创建一个动态SQL,在这里我不需要用’AND’或’OR’指定列,就像在Postgres中可以做到的那样:

Select * 
From table 
Where table::text ~~ '%augusto%2010%text%'

阅读 191

收藏
2021-04-15

共1个答案

小编典典

这是连接动态SQL中的值的方式:

set @Pattern = '%augusto%';

select @q := concat('select * from Table1 ',
                   'where concat(', group_concat(column_name), ', "") like "', @Pattern, '"'
                   )
from information_schema.columns c
where table_name = 'Table1';

prepare st from @q;
execute st;

deallocate prepare st;

当然,动态SQL并不是特别可移植的。这个想法适用于大多数数据库。代码看起来会有所不同。

经过测试并在这里工作。

最后,您可以使用变量替换来做到这一点(这是更好的方法):

select @q := concat('select * from Table1 ',
                   'where concat(', group_concat(column_name), ', "") like ?'
                   )
from information_schema.columns c
where table_name = 'Table1';

set @p = '%augusto%';

prepare st from @q;
execute st using @p;

deallocate prepare st;

也经过测试(;-)。

2021-04-15