注册 登录
编程论坛 SQL Server论坛

怎样将姓名与身份证号码分开插入到另外一张表?

lingchen 发布于 2008-04-15 19:45, 3026 次点击
如下我有一张A表
A           B
1         张三/3213216545646
2         李四/455465456
3         李清照/87878
4         高不成/878789797
5         区阳大朋/5467987779
我要实现查询上面这张表将B列的姓名与身份证号码分开插入到新表中去,知身份证号码与姓名有/分开,请问怎样可以实现呢?要得到结果如下表:
A           B       C
1         张三     3213216545646
2         李四     455465456
3         李清照   87878
4         高不成   878789797
5         区阳大朋 5467987779
劳烦各位高手帮忙,谢谢!
8 回复
#2
provoke2008-04-16 22:36
insert into NewTable
select A,left(B,charindex('/',B)-1),right(B,len(B)-charindex('/',B))
from A
--或者
insert into NewTable
select A,substring(B,1,charindex('/',B)-1),substring(B,charindex('/',B)+1,len(B))----已更正
from A
----------------------------------------------------------------------
left/right 函数取字符串(列)左/右侧指定长度的子字符串;
substring 函数从指定字符串(列)的指定起止位置取子字符串;
charindex 函数获取子字串在指定字符串(列)中的位置,其中不包含子字符串时返回0;
len 函数返回字符串(列)的长度。
---------------------------------------------------------------------
掌握并灵活运用这几个字符串函数可以解决绝大部分字符串操作问题。

[[it] 本帖最后由 provoke 于 2008-4-20 19:56 编辑 [/it]]
#3
wonder_0082008-04-17 22:02
回复2#
insert into NewTable
select A,left(B,charindex('/',B)-1),right(B,len(B)-charindex('/',B))
from A
这种方法好像不行额。。后面的right方法不能实现把/后面的字符截取下来并存放到新表的字段中。。
而这种方法:
、insert into NewTable
select A,substring(B,1,charindex('/',B)-1),substring(B,charindex('/',B)+1,len(B)-charindex('/',B))
from A
是可以的。。
我到现在还不解,哪位可以帮忙解答下。。

[[it] 本帖最后由 wonder_008 于 2008-4-18 12:54 编辑 [/it]]
#4
lingchen2008-04-18 10:45
非常感谢两位...!
#5
lingchen2008-04-18 11:09
对了.select A,substring(B,1,charindex('/',B)-1),substring(B,charindex('/',B)+1)第二个SUBSTRING不是要带三个参数的吗?好像不对哦?
#6
重新做人2008-04-18 11:40
很好!
很强大!
#7
wonder_0082008-04-18 12:54
回复 5# 的帖子
一时粗心,。。是的。substring需要提供三个参数!!!
#8
provoke2008-04-20 20:08
非常不好意思
substring(str,i,j)
函数的三个参数:
str为字符串或列名;
i为起点
j为终点
例如,substring('身份证号码/123',4,6)的返回值是'号码/',即返回第4到6位;
charindex(substr,str):返回子串substr在str中的位置,如果包含多个子串,则返回第一个子串的位置,如charindex('abc','100abcabcabc001')的返回值为3。
我在二楼给的两种方法都可以。

[[it] 本帖最后由 provoke 于 2008-4-20 20:09 编辑 [/it]]
#9
lff6422008-04-25 16:25
create table A (A int identity(1,1),B varchar(40))
go
create table B (A int identity(1,1),B varchar(20),C varchar(20))
go

insert into A(B) select '张三/3213216545646' union all select '李四/455465456'
union all select '李清照/87878' union all select '高不成/878789797'
union all select '区阳大朋/5467987779'



select B,left(B,charindex('/',B)-1),right(B,len(B)-charindex('/',B)) from A

insert into B (B,C)  select left(B,charindex('/',B)-1),right(B,len(B)-charindex('/',B)) from A

select * from A
select * from B
1