偶然遇到了一些奇怪的事情。
SELECT * from tablename WHERE mytext LIKE '%string1%' '%1234%';
工作绝对等于SELECT * from tablename WHERE mytext LIKE '%string1%' AND mytext LIKE '%1234%';
我的代码出了问题,或者我只是不知道,在文档中找不到它?
字符串文字会自动连接起来,如下所述。
例如,'hello' 'world'
等效于单个文字'helloworld'
因此,当你写:
SELECT * from tablename WHERE mytext LIKE '%string1%' '%1234%';
这实际上相当于写:
SELECT * from tablename WHERE mytext LIKE '%string1%%1234%';
正如你所指出的,这有点类似于:
SELECT * from tablename WHERE mytext LIKE '%string1%' AND mytext LIKE '%1234%';
但并不完全如此。事实上,前者将匹配'string1 1234'
,但不匹配'1234 string1'
。
请尝试以下示例进行验证:
create table tablename(
pkey bigint,
mytext varchar(64)
);
insert into tablename values (1, 'a b'), (2, 'a c'), (3, 'b a');
select * from tablename where mytext like '%a%' '%b%'; -- returns 1 row
select * from tablename where mytext like '%a%' and mytext like '%b%'; -- returns two rows