sql截取特定字符前的数据

SQL截取字符之前的数据。
使用 LEFT+CHARINDEX 或 INSTR。

SQLServer 截断逗号前的数据 (LEFT(your_column_name,CHARINDEX(',',your_column_name)-1 )。

MySQL 截断逗号前的数据 (SUBSTRING_INDEX(your_column_name,',',1 )。

逗号不存在。
可能为空,否则将返回错误。

WHERE 确保CHARINDEX(',',your_column_name)>0
自己权衡一下。

sql如何截取字符串前几位

这是一个陷阱。
SUBSTRING截取的长度不能为负数,否则MySQL返回空值。

不信,网上很多例子都忽略了这一点。

不要这样做,只需在启动参数中使用非负整数即可。

sql中如何在where字句里截取某个字段的前几位字符

说实话,不同的数据库系统在SQL中的字符截取方面是存在一些差异的。
我在甲方的时候,遇到过很多数据库差异带来的坑。

如果我们以 Oracle 为例,使用 substr() 非常简单。
我曾经有一个使用Oracle 1 1 g的项目。
为了检查表中日期字段前 4 位等于“2 02 0”的记录,我直接编写了 where substr(p.end_time, 1 , 4 ) = '2 02 0'。
有趣的是,如果使用得当,索引可以非常有效。
我的项目使用分区表,我可以使用查询时间在几秒钟内获得结果。
但请注意,Oracle 的 substr() 参数的位置有点违反直觉。
与一些从0开始计数的语言不同,第一个参数是起始位置,第二个参数是长度。

再看看SQL Server。
我在同一个项目或 SQL Server 2 008 中有一个备份数据库。
要检查具有相同条件的记录,您应该使用 substring(p.end_time, 1 , 4 ) = '2 02 0'。
当时没关注,直接迁移到Oracle的写法上。
结果报了function not found的错误。
我真的惊呆了。
查阅资料后发现SQL Server的索引优化策略与Oracle不同。
即使在相同的条件下,你也可能需要调整书写方法。

当你看这个例子时就更明显了。
Oracle 搜索前两个字符等于“1 2 ”的记录。
使用 where substr(p.end_time, 1 , 2 ) = '1 2 '。
SQL Server 变为 substring(p.end_time, 1 , 2 ) = '1 2 '。
结果是一样的,只是函数名和参数顺序不同。
如果您还没有测试过这一点,那么您可能会很难在线更改代码。

我将添加一些我在功能列表中遇到的小细节。
例如,MID()函数在MySQL中称为substring(),但参数的顺序在Oracle中是相反的。
我的一个同事以相反的顺序编写了MySQL。
当我检查数据时,发现结果全错了。
检查了很长时间,发现是该功能使用错误。
还有 LEN(),在 Oracle 中称为 length(),在 SQL Server 中称为 length(),在 SQLite 中称为 length(),在 PostgreSQL 中称为 char_length()。
这个基本函数在每个数据库中都有不同的名称,这非常令人沮丧。

建议每个数据库系统都有一套单独的特性比较表。
为了节省时间,我买了电子版,但后来发现我还记得手写版。
我不得不在深夜紧急检查某个特定功能。
正当我迷迷糊糊地翻着电子版的时候,我找到了一张手写的对比图,完成了。
可见,细节的积累非常重要。