首页
学习
活动
专区
圈层
工具
发布

mysql的substr函数

基础概念

SUBSTR 是 MySQL 中的一个字符串函数,用于从字符串中提取子字符串。它可以根据指定的起始位置和长度来截取字符串的一部分。

语法

代码语言:txt
复制
SUBSTR(str, pos[, len])
  • str:要截取的原始字符串。
  • pos:起始位置(从 1 开始计数)。
  • len:截取的长度(可选,默认为到字符串末尾)。

优势

  1. 灵活性:可以根据不同的起始位置和长度截取字符串,适用于各种复杂的字符串处理需求。
  2. 高效性:作为内置函数,SUBSTR 在 MySQL 中经过优化,执行效率高。

类型

SUBSTR 函数主要分为两种类型:

  1. 从指定位置开始截取
  2. 从指定位置开始截取
  3. 从指定位置开始截取到字符串末尾
  4. 从指定位置开始截取到字符串末尾

应用场景

  1. 数据提取:从长字符串中提取特定部分的数据,如从日志文件中提取关键信息。
  2. 数据清洗:在数据处理过程中,去除或替换字符串的特定部分。
  3. 数据格式化:将字符串格式化为特定的格式,如截取日期字符串中的年月日部分。

常见问题及解决方法

问题1:起始位置超出字符串长度

原因:指定的起始位置 pos 超出了字符串的实际长度。

解决方法:在使用 SUBSTR 函数时,确保起始位置在字符串的有效范围内。可以使用 LENGTH 函数获取字符串的长度。

代码语言:txt
复制
SELECT SUBSTR('Hello, World!', 15); -- 结果:''(空字符串)

问题2:负数起始位置

原因:MySQL 允许负数起始位置,表示从字符串末尾开始计数。

解决方法:如果不需要负数起始位置,可以在查询前进行检查和处理。

代码语言:txt
复制
SELECT CASE WHEN pos > 0 THEN SUBSTR('Hello, World!', pos) ELSE '' END AS result FROM (SELECT -5 AS pos) AS t; -- 结果:''(空字符串)

问题3:截取长度超出字符串剩余部分

原因:指定的截取长度 len 超过了从起始位置到字符串末尾的实际长度。

解决方法:MySQL 会自动调整截取长度,确保不会超出字符串的实际范围。

代码语言:txt
复制
SELECT SUBSTR('Hello, World!', 8, 20); -- 结果:'World!'

参考链接

MySQL SUBSTR 函数文档

通过以上内容,您应该对 MySQL 的 SUBSTR 函数有了全面的了解,包括其基础概念、优势、类型、应用场景以及常见问题的解决方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL substr函数使用详解

MySQL substr函数使用详解 摘要 在本篇博客中,我们将深入探讨MySQL数据库中极为重要的函数之一:substr函数。适用于各类用户,从数据库新手到资深开发者,都能从本文中获益。...我们将通过详细的示例和易懂的解释,帮助你掌握如何在实际项目中灵活运用substr函数。关键词:MySQL, substr函数, 数据处理, 字符串操作, 数据库优化, 编程技巧。...引言 亲爱的粉丝们,我是猫头虎,今天带大家深入了解MySQL数据库中的一项神器——substr函数。无论你是数据处理的新手还是寻找更高效数据操作方法的老手,这篇文章都将为你打开新世界的大门。...正文 substr函数简介 substr函数,用于从字符串中提取子字符串。它非常灵活,可以根据指定的起始位置和长度来截取字符串,成为了数据库操作中不可或缺的一部分。...总结 substr函数是MySQL中极为强大的字符串处理工具,它简单、灵活,是每位开发者都应该掌握的基本技能。

2.5K10
  • SQL函数 SUBSTR

    SQL函数 SUBSTR返回从指定字符串表达式派生的子字符串的字符串函数。...大纲SUBSTR(string-expression,start[,length])参数 string-expression - 要从中派生子字符串的字符串表达式。...表达式可以是列名、字符串文字或另一个标量函数的结果,其中基础数据类型可以表示为任何字符类型(例如 CHAR 或 VARCHAR)。 start - 一个整数,它指定子字符串在字符串表达式中的开始位置。...描述因为 start 可以是负数,所以可以从原始字符串的开头或结尾获取子字符串。作为参数传递给 SUBSTR 的浮点数通过截断小数部分转换为整数。...应首先从原始字符串的末尾倒数五个字符,然后返回接下来的四个字符:SELECT SUBSTR('ABCDEFG',-5,4) AS SubCDEF

    1.1K10

    YashanDB REGEXP_SUBSTR函数

    REGEXP_SUBSTR为正则表达式函数,其功能与参数定义均类似于REGEXP_INSTR,但它不返回子字符串的位置,而是返回子字符串本身。函数返回值为VARCHAR类型。...exprexpr的值须为字符型,或可转换为字符型的其他类型,不能为转义字符。当expr的值为NULL时,函数返回NULL。expr不支持32000字节以上的XMLTYPE、LOB类型数据。...函数使用输入字符集定义的字符计算字符串(仅支持UTF-8)。regexpRegExp,长度不超过512字节,支持转义字符,可为NULL,此时函数返回NULL。...当position超出expr值的长度时,不执行匹配,函数返回NULL。未指定此值时,默认从第一个字符开始匹配。...subexprsubexpr参数用于当regexp中含有子表达式时,指定函数返回某一个子表达式所匹配到的位置,subexpr的值只能为0到9之间的某个整数(对于小数将截断为整数)。

    43400

    c++字符串函数 --- substr()函数的用法

    有关字符串截取函数的用法老不清晰。却总会时不时用到。例如蓝桥杯的一个大题想着用字符串截取函数substr()函数跑暴力匹配。...结果却用错了… 简单记录下substr()函数的参数表示 #include #include using namespace std; int main() {   ...形式:s.substr(pos, n) 解释:返回一个string,包含s中从pos开始的n个字符的拷贝(pos的默认值是0,n的默认值是s.size() - pos,即不加参数会默认拷贝整个s) 充:...若pos的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾 我们来简单看一个例题...没有就输出“0”; 思路:我们遍历母串s1,用字符串截取函数,每次截取s2.size()的长度。然后进行匹配,看是否相等,相等就直接输出值,随后break掉。

    4K20

    CC++中substr函数的应用(简单讲解)

    substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('Hello World',0,1) //返回结果为 'H'  *从字符串第一个字符开始截取长度为1的字符串 substr...('Hello World',1,1) //返回结果为 'H'  *0和1都是表示截取的开始位置为第一个字符 substr('Hello World',2,4) //返回结果为 'ello' substr...('Hello World',-3,3)//返回结果为 'rld' *负数(-i)表示截取的开始位置为字符串右端向左数第i个字符 测试: select substr('Hello World',-3,3...= NULL); 9 10 int total_length = strlen(srcstr);//首先获取srcstr的长度 11 //判断srcstr的长度减去需要截取的substr...开始位置之后,剩下的长度 12 //是否大于指定的长度length,如果大于,就可以取长度为length的子串 13 //否则就把从开始位置剩下的字符串全部返回。

    5K40

    【Oracle笔记】instr和substr函数的用法及实例解析

    文章目录 一、instr(字符查找函数) 二、substr (字符截取函数) 一、instr(字符查找函数) 格式一:instr(源字符串,目标字符串) 格式二:instr(字符串,目标字符串,起始位置...,匹配序号) 1、"WO"的位置 select instr('HELLO WORLD','WO') from dual; //结果:7 2、"O"第二次出现的位置 select instr('HELLO...WORLD','O',1,2) from dual; //结果:8 3、"O"倒数第二次出现的位置 select instr('HELLO WORLD','O',-1,2) from dual;...//结果:5 二、substr (字符截取函数) 格式一: substr(字符串,开始位置,截取长度) 格式二: substr(字符串,开始位置) (注:0或1都是从第一位开始截取) 1、从第5位开始截取...select substr('HELLO WORLD',5) from dual; //结果:O WORLD 2、从第5位开始截取3位 select substr('HELLO WORLD',5,3

    6.6K40

    数据库截取字符串SUBSTR函数的使用

    背景 今天中午做需求的时候,有类似于根据银行卡卡号的前几位判断出是哪个银行的情况,每个银行需要截取的位数都不一样,这时我就想到了SUBSTR 数据库截取字符串SUBSTR函数的使用 假设有一个表的结构如下...写sql语句的时候就能看到有很多的substr函数的提示,各人根据需求选用。 ?...其中的 str表示被截取的字段     pos表示开始的下标     len表示截取的长度 SUBSTR(str FROM pos FOR len)的使用: 1 SELECT SUBSTR(idtf_value...) 4 SUBSTRING(str FROM pos) 5 SUBSTRING(str,pos) 6 SUBSTRING(str,pos,len) 这几个函数的用法和上面的两种类似,参见上述; SUBSTRING_INDEX...(str,delim,count)函数的用法 用法规则: SUBSTRING_INDEX(“待截取有用部分的字符串”,“截取数据依据的字符”,截取字符的位置N) 例如: 1 SELECT SUBSTRING_INDEX

    2.1K20

    Oracle通过substr,instr,translate函数的组合获取日期分割表

    实现思路 因为我们想要的表名最后四位就是YYYYMM代表年月的数字,想要获取对应的表名我们可以分为三步: 获取表名最后六位。(substr) 然后通过转义的方式把是数字的转换为一个特殊字符。...(instr) 代码实现 通过substr函数获取表名最后六位 substr(string, a, b); 参数: string 需要截取的字符串 a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取...上图中可以看到我们用substr的函数只显示最后6位的名称了。...---- 通过translate函数将数字转换为特殊字符“/” translate(string, from, to) 参数: string 需要转换的数据源 from 需要替换的字符 to 替换后的字符...可以看到通过translate后把数字都替换为/了,这样的话我们可以直接判断不是六个//////就是我们想要的数据了 注:translate的第二个参数和第三个参数中的长度要对应,一开始我还没了解这个函数时写法时用的第三个参数只有一个

    2.6K10

    MySql常用函数(逻辑判断,字符串处理,日期函数)FIND_IN_SET、IF、ISNULL、IFNULL、NULLIF、SUBSTR、SUBSTRING_INDEX、CONCAT、LENGTH

    数据库版本:MySql 5.7 FIND_IN_SET 定义: 在逗号分隔的字符串列表中查找指定字符串的位置 FIND_IN_SET(str,strlist) FIND_IN_SET()函数接受两个参数...第二个参数strlist是要搜索的逗号分隔的字符串列表 FIND_IN_SET()函数根据参数的值返回一个整数或一个NULL值: 如果str或strlist为NULL,则函数返回NULL值。...IF函数 定义: IF函数根据条件的结果为true或false,true 返回第一个值,false返回第二个值。...NULLIF(exper1,exper2) 字符串函数 SUBSTR SUBSTR (str, pos) 截取从pos位置开始到最后的所有str字符串,mysql中的start是从1开始的 SUBSTR...(str, pos, len) 参数说明: str为列名/字符串; pos为起始位置;mysql中的起始位置pos是从1开始的;如果为正数,就表示从正数的位置往下截取字符串(起始坐标从1开始),反之如果起始位置

    2.7K10
    领券