我试图在多列中搜索标签并返回类型。
下面是我的查询的简化版本。
set @item_1 = '(Tag1|Tag2|Tag3|Tag4)(,| |$)',
@item_2 = '(Tag5|Tag6|Tag7|Tag8)(,| |$)';
select
case
when tags_1 regexp @item_1
then 'Item_1'
when tags_2 regexp @item_1
then 'Item_1'
when tags_1 regexp @item_2
then 'Item_2'
when tags_2 regexp @item_2
then 'Item_2'
else 'Uncategorised'
end type
from my_table
order by date desc
有什么方法可以将标签设置为变量,并在正则表达式中使用它们。我已经尝试了上面,并得到下面的错误。
[ERROR in query 2] Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation 'regexp'
谢谢。
最佳答案
在COLLATE
表达式之后每添加一个REGEXP
。
set @item_1 = 'Tag1|Tag2|Tag3|Tag4',
@item_2 = 'Tag5|Tag6|Tag7|Tag8';
select
case
when tags_1 regexp concat(@item_1, '(%)(,|$)') COLLATE utf8_unicode_ci
then 'Item_1'
when tags_2 regexp concat(@item_1, '(%)(,|$)') COLLATE utf8_unicode_ci
then 'Item_1'
when tags_1 regexp concat(@item_2, '(%)(,|$)') COLLATE utf8_unicode_ci
then 'Item_2'
when tags_2 regexp concat(@item_2, '(%)(,|$)') COLLATE utf8_unicode_ci
then 'Item_2'
else 'Uncategorised'
end type
from my_table
order by date desc;
另一个解决方法是将表排序规则更改为latin1-默认排序规则/模式默认。您不再需要指定
COLLATE
。关于mysql - 在MySql Regex查询中使用变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35199127/