我在蜂巢中遇到一个奇怪的问题
表a
:
id, domain
1, m.taobao.com
2, m.tmall.com
表b
domain
%taobao\\.com%
%tmall\\.com%
当我使用时:
Select a.id, a.domain from a where a like '%taobao\\.com%' or a.like '%tmall\\.com%'
效果很好
但是当我使用
select a.id, a.domain from a, b where a.domain like b.domain
我返回null。
b.domain
是'%taobao\\.com%'
或'%tmall\\.com%'
。在SQL查询中直接使用它们有什么不同?是什么使第二个查询失败?
答案 0 :(得分:0)
在模板中没有'\\'
的情况下效果很好:
select a.*
from
(--Use your table instead of this subquery
select stack(2,
1, 'm.taobao.com',
2, 'm.tmall.com') as (id, domain)
)a
cross join
(--Use your table instead of this subquery
select stack(2,
'%taobao.com%',
'%tmall.com%'
) as domain
) b
where a.domain like b.domain;
结果:
OK
1 m.taobao.com
2 m.tmall.com
与常量模板相同。这不会产生行:
select a.*
from
(--Use your table instead of this subquery
select stack(2,
1, 'm.taobao.com',
2, 'm.tmall.com') as (id, domain)
)a
where a.domain like '%taobao\\.com%'
这很好用:
where a.domain like '%taobao.com%'
Documentation说LIKE
运算符只能识别_
和%
模板:“ B中的_字符与A中的任何字符匹配(类似于posix正则表达式中的。 ),而B中的%字符与A中任意数量的字符匹配(类似于posix正则表达式中的。*)。例如,“ foobar”(如“ foo”)的计算结果为FALSE,而“ foobar”(如“ foo_ _ _”)的结果为FALSE设为TRUE,“ foobar”也如“ foo%”一样。”因此,对于LIKE运算符,您无需转义'.'
。
您只需要'.'
运算符就可以对RLIKE
进行转义以匹配点字符,因为它使用Java正则表达式。