无分隔符的字符串截取

题目要求

数据库中字段值:

实现效果:需要将一行数据变成多行

实现的sql

SELECT LEFT(SUBSTRING('P1111',help_topic_id+1),1) AS num FROM mysql.help_topic WHERE help_topic_id < LENGTH('P1111');

涉及的知识点

一、字符串截取:SUBSTRING(str,pos)

1、参数说明

参数名

解释

str

需要拆分的字符串

delim

分隔符,通过某字符进行拆分

count

当 count 为正数,取第 n 个分隔符之前的所有字符; 当 count 为负数,取倒数第 n 个分隔符之后的所有字符。

2、 举例

(1)获取第2个以“,”逗号为分隔符之前的所有字符。

SUBSTRING_INDEX('7654,7698,7782,7788',',',2)

(2)获取倒数第2个以“,”逗号分隔符之后的所有字符

SUBSTRING_INDEX('7654,7698,7782,7788',',',-2)

二、替换函数:replace( str, from_str, to_str)

1、参数解说

参数名

解释

str

需要进行替换的字符串

from_str

需要被替换的字符串

to_str

需要替换的字符串

2、 举例

(1)将分隔符“,”逗号替换为“”空。

REPLACE('7654,7698,7782,7788',',','')

三、获取字符串长度:LENGTH( str )

1、参数解说

参数名

解释

str

需要计算长度的字符串

2、举例

(1)获取 ‘7654,7698,7782,7788' 字符串的长度

LENGTH('7654,7698,7782,7788')

实现的SQL解析

SELECT

SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num

FROM

mysql.help_topic

WHERE

help_topic_id < LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,7788',',',''))+1

此处利用 mysql 库的 help_topic 表的 help_topic_id 来作为变量,因为 help_topic_id 是自增的,当然也可以用其他表的自增字段辅助。

help_topic 表:

实现步骤:

Step1:首先获取最后需被拆分成多少个字符串,利用 help_topic_id 来模拟遍历 第n个字符串。

涉及的代码片段:

help_topic_id < LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,7788',',',''))+1

Step2:根据“,”逗号来拆分字符串,此处利用 SUBSTRING_INDEX(str, delim, count) 函数,最后把结果赋值给 num 字段。

涉及的代码片段:

SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num

第一步:

以”,”逗号为分隔符,根据 help_topic_id 的值来截取第n+1个分隔符之前所有的字符串。 (此处 n+1 是因为help_topic_id 是从0开始算起,而此处需从第1个分隔符开始获取。)

SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1)

eg:

当 help_topic_id = 0时,获取到的字符串 = 7654

当 help_topic_id = 1时,获取到的字符串 = 7654,7698

…(以此类推)

第二步:

以”,”逗号为分隔符,截取倒数第1个分隔符之后的所有字符串。

SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1)

eg:

根据第一步,当 help_topic_id = 0时,获取到的字符串 = 7654,此时第二步截取的字符串 = 7654

根据第一步,当 help_topic_id = 1时,获取到的字符串 = 7654,7698,此时第二步截取的字符串 = 7698

…(以此类推)

最终成功实现了以下效果 ~

注:不含分隔符的字符串拆分可参考 MySQL——字符串拆分(无分隔符的字符串截取)

补充:mysql字段分隔符拆分_MySQL里实现类似SPLIT的分割字符串的函数

下边的函数,实现了象数组一样去处理字符串。

一、用临时表作为数组

create function f_split(@c varchar(2000),@split varchar(2))

returns @t table(col varchar(20))

as

begin

while(charindex(@split,@c)<>0)

begin

insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))

set @c = stuff(@c,@c),'')

end

insert @t(col) values (@c)

return

end

go

select * from dbo.f_split('dfkd,dfdkdf,dfdkf,dffjk',',')

drop function f_split

col

--------------------

dfkd

dfdkdf

dfdkf

dffjk

(所影响的行数为 4 行)

二、按指定符号分割字符串

返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。

CREATE function Get_StrArrayLength

(

@str varchar(1024),--要分割的字符串

@split varchar(10) --分隔符号

)

returns int

as

begin

declare @location int

declare @start int

declare @length int

set @str=ltrim(rtrim(@str))

set @location=charindex(@split,@str)

set @length=1

while @location<>0

begin

set @start=@location+1

set @location=charindex(@split,@str,@start)

set @length=@length+1

end

return @length

end

调用示例:

select dbo.Get_StrArrayLength('78,2,3',')

返回值:4

三、按指定符号分割字符串

返回分割后指定索引的第几个元素,象数组一样方便

CREATE function Get_StrArrayStrOfIndex

(

@str varchar(1024),--要分割的字符串

@split varchar(10),--分隔符号

@index int --取第几个元素

)

returns varchar(1024)

as

begin

declare @location int

declare @start int

declare @next int

declare @seed int

set @str=ltrim(rtrim(@str))

set @start=1

set @next=1

set @seed=len(@split)

set @location=charindex(@split,@str)

while @location<>0 and @index>@next

begin

set @start=@location+@seed

set @location=charindex(@split,@start)

set @next=@next+1

end

if @location =0 select @location =len(@str)+1

--这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。

return substring(@str,@start,@location-@start)

end

调用示例:

select dbo.Get_StrArrayStrOfIndex('8,9,4',2)

返回值:9

四、结合上边两个函数,象数组一样遍历字符串中的元素

declare @str varchar(50)

set @str='1,3,4,5'

declare @next int

set @next=1

while @next<=dbo.Get_StrArrayLength(@str,')

begin

print dbo.Get_StrArrayStrOfIndex(@str,@next)

set @next=@next+1

end

调用结果:

1

2

3

4

5

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

.net mysql字符串截取_MySQL 字符串拆分操作(含分隔符的字符串截取)相关推荐

  1. python怎么拆分没有分隔符字符串_python如何拆分含有多种分隔符的字符串

    案例: 把某个字符串依据分隔符拆分,该字符包含不同的多种分隔符,如下 s = '12;;7.osjd;.jshdjdknx+' 其中 ; . + 是分隔符 有哪些解决方案? 方法1:通过str.spl ...

  2. java字符串根据分隔符取值_java中解析含分隔符的字符串

    java中解析含分隔符的字符串 (2010-03-24 16:43:58) 标签: 杂谈 字符串的分隔对于一个以某种分隔符标识字段的字符串,如果想得到串中每个字段项,常用的分隔方法能3种. 设args ...

  3. mysql日期代码_mysql日期查询操作代码

    mysql日期查询操作 mysql日期函数与mysql日期查询操作. 今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 Sel ...

  4. 【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序打印字符串 | 递归要素 | 递归停止条件 | 递归操作 )

    文章目录 一.借助 递归函数操作 逆序打印字符串 二.完整代码示例 一.借助 递归函数操作 逆序打印字符串 递归需要掌握下面 222 个点 : 参数入栈模型 : 第 111 次 , "sdh ...

  5. 【Python教程】两种方法教你拆分含有多种分隔符的字符串

    方法一:连续使用str.spilt()方法,每次处理一种分隔符: str.split()方法的应用:按某一种分隔符分割字符串: #不能用单词字符进行分割(字母.数字.下划线) A.str.split( ...

  6. mysql密码高级_MySQL数据库高级操作(图文详解)

    数据表高级操作 准备工作:安装MySQL数据库 create database CLASS; use CLASS; create table TEST (id int not null,name ch ...

  7. mysql初级数据库_MYSQL初级数据库操作

    MYSQL是个好东西啊,只是比较会折腾人,所以我先记录一下MySQL 数据备份的基础知识,省得以后又去东找西找 Windows文件名.目录名不区分大小写,Linux区分大小写 查看MySQL中的数据库 ...

  8. mysql函数封装_Mysql对文件操作的封装

    在查看Mysql对文件的操作中发现,它在不同的操作系统上对文件的操作,除了使用标准C运行库函数,包括open.close.seek等,在Win32下的文件和目录操作函数使用了CreatFile.Clo ...

  9. mysql insert 运算_MySql insert插入操作的3个小技巧分享

    1.插入的数据来源自其他表 表A有id, cola 字段 表B有id, cola, colb...等字段,其中id都为主键,cola为相同名字的列 现想将表B中colb>1000的记录都插入表A ...

最新文章

  1. 清华大学:2021元宇宙研究报告!(附PPT下载)
  2. python 删除代码中的注释,正则匹配
  3. PHP代码审计中你不知道的牛叉技术点
  4. 一个高级的makefile文件
  5. [转]Android中pendingIntent的深入理解
  6. Win7/8出现An error occurred on the server when processing the URL解决办法
  7. 原生态HTML文件上传与下载
  8. 融云 php web在线客户,GitHub - yy526063395/Web-IM-mini: PHP+layIM+融云简单实现版
  9. Android 系统(16)---应用启动过程
  10. Swift中字典解析后的问题,!?两种拆包的差别
  11. 图文详解——将本地项目上传到码云(gitee)远程仓库
  12. bzoj 3451 Normal
  13. UNIX操作系统发展史简介
  14. reportlab 应用 打印考生成绩
  15. vmware tools的下载
  16. @ParserError: field larger than field limit (131072)
  17. 机器学习的6个核心算法
  18. 使用Mixamo绑定骨骼导入动画
  19. Rstudio的安装操作
  20. linux mmc 读写,这个mmc读取linux的原因是什么

热门文章

  1. [PyTorch] 基于python和pytorch的多项式回归
  2. 安卓调用系统语音识别功能全解(谷歌语音服务):获取识别结果,使用语音识别进行搜索。
  3. java使用SAX接口解析xml文件
  4. matlab2c使用c++实现matlab函数系列教程- poly函数
  5. jquery系列教程6-ajax的应用全解
  6. Triple Generative Adversarial Nets
  7. 使用现代 C++ 技术增强多核优化
  8. 洛谷 P1086 花生采摘
  9. proteus实现单片机的仿真
  10. jdk配置环境变量的方法