sql判断字符出现的位置

上周我正在做一个数据库项目,我需要找到不同数据库中符号的位置。
首先,我使用了SQL Server中的CHARINDEX函数。
这个功能真的很方便,可以让你直接确定角色的位置。
例如,如果我检查“abcde”中“a”的位置,它将返回1 ,表明“a”位于第一个位置。
我还尝试指定起始位置,例如从第二个字符开始搜索“h”,它返回9 ,表明“h”在第九个位置。

2 02 3 年,我切换到MySQL,发现它有两个方法:LOCATE和POSITION。
LOCATE,我检查“HelloWorld”中“o”的位置,它返回5 ,表明“o”在第五个位置。
POSITION 函数类似。
我检查“Hello”中“l”的位置,它返回2 ,表明“l”在第二个位置。

朋友说要注意几个关键点。
首先,所有函数都从1 开始,而不是0。
其次,存在区分大小写的问题。
SQLServer默认不区分大小写,但MySQL默认区分大小写。
另外,如果没有找到该字符,该函数返回0。
最后,应考虑跨数据库功能的兼容性。
CHARINDEX仅适用于SQLServer,而LOCATE适用于MySQL和Oracle。

我想到的另一件事是,这些函数在处理空格或换行符等特殊字符时可能有一些限制。
但具体细节需根据实际使用情况进行调整。
明白了这一点,使用这些数据库函数还是很巧妙的。

SQL如何截取指定字段某一个字符的前面/后面的字符串

SQL服务器: SUBSTRING('OPE-CZ-1 08 -003 -SE7 1 .2 ', 1 , CHARINDEX('.', 'OPE-CZ-1 08 -003 -SE7 1 .2 ')
1 ) → "OPE-CZ-1 08 -003 -SE7 1 " SUBSTRING('OPE-CZ-1 08 -003 -SE7 1 .2 ', CHARINDEX('.', 'OPE-CZ-1 08 -003 -SE7 1 .2 ') + 1 , LEN('OPE-CZ-1 08 -003 -SE7 1 .2 ')) → "2 "
Oracle: SUBSTR('OPE-CZ-1 08 -003 -SE7 1 .2 ', 1 , INSTR('OPE-CZ-1 08 -003 -SE7 1 .2 ', '.')
1 ) → "OPE-CZ-1 08 -003 -SE7 1 " SUBSTR('OPE-CZ-1 08 -003 -SE7 1 .2 ', INSTR('OPE-CZ-1 08 -003 -SE7 1 .2 ', '.') + 1 , LENGTH('OPE-CZ-1 08 -003 -SE7 1 .2 ')) → "2 "
MySQL: SUBSTRING('OPE-CZ-1 08 -003 -SE7 1 .2 ', 1 , LOCATE('.', 'OPE-CZ-1 08 -003 -SE7 1 .2 ')
1 ) → "OPE-CZ-1 08 -003 -SE7 1 " SUBSTRING('OPE-CZ-1 08 -003 -SE7 1 .2 ', LOCATE('.', 'OPE-CZ-1 08 -003 -SE7 1 .2 ') + 1 , LENGTH('OPE-CZ-1 08 -003 -SE7 1 .2 ')) → "2 "
这是一个陷阱。
编辑 SQL 语句时要精确。