SQL 字符串函数如何判断是否包含字符?

说白了:不同的数据库有不同的查找子串的功能。

LIKE 是通用的。
带有 % 通配符。
示例:类似“%a%”的名称可查找包含“a”的名称。

MySQL/Oracle 使用 INSTR。
返回地点。
示例: INSTR(name, 'a') > 0 包含。

SQL Server 使用 CHARINDEX。
顺序已颠倒。
示例: CHARINDEX('a', name) > 0 包含。

PostgreSQL 使用 POSITION。
中间加IN。
示例:包含条件('a' IN name) > 0。

SQL Server 也有 CONTAINS。
仅全文索引。
示例: CONTAINS(content, ''database'' ) 检查数据库内容。

注重大写。
MySQL 不区分大小写。
PostgreSQL 敏感。
统一大小写:大写(名称)如“%A%”
取决于显示大小写。
像'%substring%'可以扫描整个表。
当找到 INSTR/CHARINDEX/条件时停止。

字段可能为空?添加ISNOTNULL。
示例:名称不为空,名称类似于“%a%”
您决定哪一个适合您。

sql中截取字符串

这是一个坑。
别相信。
不要这样做。

第六十四章 SQL函数 INSTR

INSTR 函数,你经常使用这个。
它返回子字符串在字符串中的位置,它是一个整数。
例如,如果你想找到“abc”在“1 2 3 abc4 5 6 ”中的位置,INSTR将返回3 ,因为从左边开始,“abc”是第三个子字符串。

使用此功能,您还可以指定从哪里开始搜索。
例如,INSTR("1 2 3 abc4 5 6 ","abc",4 ) 从第四个字符开始查找“abc”,此时返回 9
您还可以设置显示次数。
例如,INSTR("1 2 3 abcabcabc","abc",1 ,2 ) 将查找第二个"abc" 的位置并返回 9
该函数区分大小写。
如果不区分大小写,则需要使用点转换功能,例如将所有内容转换为大写或小写,然后进行搜索。

有几个类似的函数,CHARINDEX、POSITION 和 $FIND,也可以完成这项工作。
但是,$FIND 返回子字符串末尾之后的位置,因此请注意这一点。

例如,如果要查找“abcdef”中“b”的位置,INSTR 返回 1 1 ,因为“b”是第 1 1 个字符。

再举个例子,你会发现每个名字中姓氏的长度。
可以先找到逗号的位置,然后减去1 例如,对于“John Doe”,找到“e”的位置为5 ,然后减去1 ,得到姓氏的长度为4
您还需要找到“John Doe”中“B”的位置。
由于 INSTR 区分大小写,因此在搜索之前必须使用 %SQLUPPER 将名称转换为大写。
转换为大写后为“JOHN DOE”。
此时'B'是第三个字符,但由于%SQLUPPER前面有一个空格,所以实际位置减1 ,显示为2
如果没有找到,则返回0。
例如,在“John Doe”中找到'X'的位置,则返回0。
此时如果减1 ,则显示-1
说实话,如果你经常使用这些功能,它们就会变得很容易使用。