想提取字符,请高手指教 40siw_28]

发布时间:2016-12-10 16:46:48 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"想提取字符,请高手指教 40siw_28]",主要涉及到想提取字符,请高手指教 40siw_28]方面的内容,对于想提取字符,请高手指教 40siw_28]感兴趣的同学可以参考一下。

现有一列数据想拆分,       SSH                      FLH          SCH       FCH   D668*5*上*   D668*5*下*   G*59*第一辑.下册*   G*59*第一辑.上册*   G*59*第三辑.上册* 现在想把SSH中第一个'*'前的字符提到FLH中,然后第一个‘*’和第二个‘*’之间的字符放到SCH中,第二个‘*’和第三个‘*’的字符放到FCH中, 如:       SSH                      FLH          SCH       FCH      D668*5*上*                D668         5         上           请高手教我!!!!急的很,在线等

create table tb(SSH nvarchar(20),FLH nvarchar(20),SCH nvarchar(20),FCH nvarchar(20)) insert into tb(SSH) select 'D668*5*上*' insert into tb(SSH) select 'D668*5*下*' insert into tb(SSH) select 'G*59*第一辑.下册*' insert into tb(SSH) select 'G*59*第一辑.上册*' insert into tb(SSH) select 'G*59*第三辑.上册*' go update tb  set FLH=LEFT(ssh,charindex('*',ssh)-1), SCH=SUBSTRING(SSH,charindex('*',ssh)+1,charindex('*',ssh,charindex('*',ssh)+1)-charindex('*',ssh)-1), FCH=SUBSTRING(ssh,charindex('*',ssh,charindex('*',ssh)+1)+1,LEN(ssh)-charindex('*',ssh,charindex('*',ssh)+1)-1) select * from tb /* SSH                  FLH                  SCH                  FCH -------------------- -------------------- -------------------- -------------------- D668*5*上*            D668                 5                    上 D668*5*下*            D668                 5                    下 G*59*第一辑.下册*         G                    59                   第一辑.下册 G*59*第一辑.上册*         G                    59                   第一辑.上册 G*59*第三辑.上册*         G                    59                   第三辑.上册 (5 行受影响) */ go drop table tb

教好了,请结帖.

charindex 和 substring的应用

create table tb(SSH nvarchar(20),FLH nvarchar(20),SCH nvarchar(20),FCH nvarchar(20)) insert into tb(SSH) select 'D668*5*上*' insert into tb(SSH) select 'D668*5*下*' insert into tb(SSH) select 'G*59*第一辑.下册*' insert into tb(SSH) select 'G*59*第一辑.上册*' insert into tb(SSH) select 'G*59*第三辑.上册*' go update tb  set flh = replace(parsename(replace(replace(left(SSH,len(ssh)-1), '.' , '#'),'*','.'),3),'#','.'),     SCH = replace(parsename(replace(replace(left(SSH,len(ssh)-1), '.' , '#'),'*','.'),2),'#','.'),     fCH = replace(parsename(replace(replace(left(SSH,len(ssh)-1), '.' , '#'),'*','.'),1),'#','.') select * from tb drop table tb /* SSH                  FLH                  SCH                  FCH                   -------------------- -------------------- -------------------- --------------------  D668*5*上*            D668                 5                    上 D668*5*下*            D668                 5                    下 G*59*第一辑.下册*         G                    59                   第一辑.下册 G*59*第一辑.上册*         G                    59                   第一辑.上册 G*59*第三辑.上册*         G                    59                   第三辑.上册 (所影响的行数为 5 行) */

我这表里不光是这几条数据,还有别的 如: SSH                  FLH                  SCH                  FCH -------------------- -------------------- -------------------- -------------------- D668*5*上*            D668                 5                    上 D668*5*下*            D668                 5                    下 G*59*第一辑.下册*         G                    59                   第一辑.下册 G*59*第一辑.上册*         G                    59                   第一辑.上册 G*59*第三辑.上册*         G                    59                   第三辑.上册 G8*2*                   G8                    2

引用 5 楼 siw_28 的回复:我这表里不光是这几条数据,还有别的 如: SSH FLH SCH FCH -------------------- -------------------- -------------------- -------------------- D668*5*上* D668 5 上 D668*5*下* D668 5 下 G*59*第一辑.下册* G 59 第一辑.下册 G*59*第一辑.…… 只要适合一条记录中最多三个*,亦可用parsename解决.

charindex和substring应该能实现吧

引用 4 楼 dawugui 的回复:SQL code create table tb(SSH nvarchar(20),FLH nvarchar(20),SCH nvarchar(20),FCH nvarchar(20)) insert into tb(SSH) select 'D668*5*上*' insert into tb(SSH) select 'D668*5*下*' insert into tb(SSH) sele…… 学习下这方法

上一篇:sql sever 2008怎么附加不上数据库呢? 40分,无满意结帖,结帖人z7152008]
下一篇:sql优化,头疼啊,菜鸟虚心请教,求指导! 100liuxibei1987]

相关文章

相关评论