前言:
今天在做一个需求的时候,需要判断字符串中是否包含一个子串,然后我发现了我平常没注意到的一个点,通过这篇博文来记录一下。
IN
函数用于判断一个元素是否存在于所给的元素组中,如果存在则返回 true
,不存在则返回 false
。
例如:
SELECT 'a' IN('a','b','c');
-- true
所给的元素组需要用小括号引用。
当我在使用 IN
函数的时候犯了一个错误,如下所示:
SELECT 'a' IN('aaa');
-- false
我下意识的认为 IN
函数是判断 a
是否存在于字符串 aaa
中,故误认为返回结果是 true
,之前用好像也没毛病,但往往就容易在这种小细节上犯错。
一定要注意,IN
函数是判断某个元素是否【完全等于】所给元素组中的某项内容,而不是包含!!!
INSTR(str, substr)
:返回子串 substr
在字符串 str
中第一次出现的位置,如果未找到,则返回 0
。
例如:
SELECT INSTR('Hello,World', 'World');
-- 7
SELECT INSTR('Hello,World Hello,World2', 'World');
-- 7
应用场景:常常用于判断字符串中是否包含给定子串。
SUBSTR(str, pos, len)
:返回字符串 str
中从位置 pos
开始的长度为 len
的子串。
例如:
SELECT SUBSTR('Hello,World', 7, 5);
-- World
应用场景:获取字符串中的子串。
LOCATE(substr, str)
:返回子串 substr
在字符串 str
中第一次出现的位置,如果未找到,则返回 0
。LOCATE
是 INSTR
的同义词,区别是 LOCATE
子串在前,而 INSTR
是字符串在前。
例如:
SELECT LOCATE('World','Hello,World');
-- 7
SELECT LOCATE('World','Hello,World Hello,World2');
-- 7
应用场景:常常用于判断字符串中是否包含给定子串。
LIKE
:用于模糊匹配字符串,通常与通配符 %
和 _
一起使用,但不是严格的子串查找函数。
例如:
SELECT 'Hello,World' LIKE '%World%';
-- true
SELECT 'Hello,World Hello,World2' LIKE '%World%';
-- true
应用场景:用于匹配字符串中包含特定子串的情况。