sql截取字符串函数

SQL Server 使用子字符串+字符索引。
Oracle使用substr+instr。

charindex 查找第一个 . instr 也搜索第一个位置。

两者都允许您将 name1 字段截取到第一个字段之前的内容。
参数的用法不同。

charindex 必须指定开始和结束位置。
instr直接指定起始位置和字符。

使用哪一种取决于具体情况。
您通常使用哪个数据库?

sql截取特定字符前的数据

说实话,当我第一次接触SQL时,截取字符串的想法完全让我困惑。
尤其是当我想在特定的固定字符之前截断时,我仍然发现SQL Server的CHARINDEX+LEFT组合是最直观的。
记得有一次,我在给客户制作报表时,要求将用户名和部门分开显示,但数据格式却是“张三,技术部”。
我多次尝试直接使用 SUBSTRING 但没有任何效果。
最后我用CHARINDEX找到逗号位置,然后让LEFT截取上一段。

有趣的是,在 MySQL 端使用 SUBSTRING_INDEX 实际上更容易。
我有一个朋友是开发人员,他说MySQL的写法特别直观:SUBSTRING_INDEX(user_name, ',', -1 )给我直接返回“技术部”,这样我就不用自己去计算位置了。
但是,如果您习惯了 SQL Server,那么当您切换到它时有时很容易感到困惑 - 例如,您忘记了 MySQL 中的索引从 1 开始。

请告诉我一个具体情况。
我之前采用的是旧系统,数据表中有一个字段以固定格式存储“Project ID Project Name”。
不过,有一个新的要求:ID和姓名必须分开显示。
在 SQL Server 端,只需编写 LEFT(project_info, CHARINDEX('-', project_info)
1 )。
当你切换到 MySQL 时,它变成 SUBSTRING_INDEX(project_info, '-', 1 )。
在某一时刻,测试数据中缺少一些没有连字符的记录。
SQL Server 直接返回整个字符串,MySQL 抛出错误。
当时我还在问自己为什么表现会不一样。

我还没有亲自运行过PostgreSQL在这方面的实现,但我怀疑这是一个类似的想法,只是函数名称已更改为position或split_part。
我记得微软在SQL Server中添加了一个STRING_SPLIT函数,这可能是因为你习惯了旧的方法或者新的功能在一些复杂的场景下不如传统的组合稳定。

我记得数据是2 01 8 年左右的,统计数据是在一篇专业文章中收集的。
当时,超过6 0%的SQL Server用户仍然依赖CHARINDEX和LEFT来处理字符串。
当然现在关系可能已经变了,但是这个套路绝对还是基金会中的基金会。
老实说,有时候看到年轻同事写REGEXP_SUBSTR或者正则表达式来截取字符串,我会觉得很烦——太复杂了,出错的机会也大大增加。

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

嘿兄弟,你问的拦截数据库字符串的问题我以前也遇到过。
我记得当时我手头有一个SQL Server项目。
有一个字段存储类似“OPE-CZ-1 08 -003 -SE7 1 .2 ”的字符串。
我的老板告诉我,我必须截取前面的部分,即“OPE-CZ-1 08 -003 -SE7 1 ”,即点“.”之前的部分。

当时我正在使用SQL Server的子字符串函数。
我记得是这样写的:
sql SELECT SUBSTRING('OPE-CZ-1 08 -003 -SE7 1 .2 ', 1 , CHARINDEX('.', 'OPE-CZ-1 08 -003 -SE7 1 .2 ')
1 ) AS 结果
这件事还蛮有趣的。
它首先找到点“.”的位置,然后从该位置减1 ,告诉substring函数从第一个字符截取到点“.”之前的字符。

后来需要将“.”后面的部分截取,作为“2 ”。
很简单,调整一下substring函数的参数即可:
sql SELECT 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 ')) AS 结果
这里它从句点“.”之后的第一个字符开始。
并一直持续到链的末端。

Oracle和MySQL类似,只是SQL语句略有不同,但基本逻辑是相同的。
对于 Oracle,您可以使用 SUBSTR 函数,对于 MySQL,您可以使用 SUBSTRING_INDEX 或 SUBSTR。

其实并不太难。
主要是记住如何使用这些函数以及如何调整它们的位置参数。
不过说起来,我之前从来没有在Oracle或者MySQL上进行过这么复杂的字符串操作,所以不敢多讲Oracle和MySQL的细节。
然而,这通常是逻辑。
呵呵,我希望这有帮助!