导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

请教个提取字段中数据的问题

Jofan 2008-01-04 10:51:12
数据中有一列是这样的
___________________
姓名*职位*电话*邮箱
___________________

如:
________________________________
张三*教师*1234567*zhang@123.net
________________________________

我现在要用select把这一列的数据提取出来变成4列
请问这个语句怎么写,请会的朋友赐教!

...全文
65 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Jofan 2008-01-04
太快了,已经解决。谢谢上面几位:)
回复
pt1314917 2008-01-04

create table kk(name varchar(100))
insert into kk select '张三*教师*1234567*zhang@123.net'
insert into kk select '小毛*学生*8888888*zhang@126.net'


alter function kkkk(@name varchar(100))
returns varchar(500)
as
begin
declare @sql varchar(500)
set @sql=replace(@name+'*','*',''' columns,''')
return ''''+left(@sql,len(@sql)-2)
end


declare @sql varchar(8000)
select @sql=isnull(@sql+' union select ','select ')+dbo.kkkk(name) from kk
exec(@sql)

回复
dawugui 2008-01-04
[code=SQL]create table tb(col varchar(50))
insert into tb values('姓名*职位*电话*邮箱')
insert into tb values('张三*教师*1234567*zhang@123.net')
go
select
col1 = replace(PARSENAME(replace(replace(col,'.','$'),'*','.'),4),'$','.'),
col2 = replace(PARSENAME(replace(replace(col,'.','$'),'*','.'),3),'$','.'),
col3 = replace(PARSENAME(replace(replace(col,'.','$'),'*','.'),2),'$','.'),
col4 = replace(PARSENAME(replace(replace(col,'.','$'),'*','.'),1),'$','.')
from tb

drop table tb

/*
col1 col2 col3 col4
-------------------------------------
姓名 职位 电话 邮箱
张三 教师 1234567 zhang@123.net

(2 行受影响)

*/
[/code]
回复
dawugui 2008-01-04
create table tb(col varchar(50))
insert into tb values('姓名*职位*电话*邮箱')
insert into tb values('张三*教师*1234567*zhang@123.net')
go
select
col1 = replace(PARSENAME(replace(replace(col,'.','$'),'*','.'),4),'$','.'),
col2 = replace(PARSENAME(replace(replace(col,'.','$'),'*','.'),3),'$','.'),
col3 = replace(PARSENAME(replace(replace(col,'.','$'),'*','.'),2),'$','.'),
col4 = replace(PARSENAME(replace(replace(col,'.','$'),'*','.'),1),'$','.')
from tb

drop table tb

/*
col1 col2 col3 col4
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
姓名 职位 电话 邮箱
张三 教师 1234567 zhang@123.net

(2 行受影响)

*/
回复
dobear_0922 2008-01-04
create table tb(col varchar(64))
insert tb select '张三*教师*1234567*zhang@123.net'


select parsename(replace(replace(col,'.','#'),'*','.'),4)
,parsename(replace(replace(col,'.','#'),'*','.'),3)
,parsename(replace(replace(col,'.','#'),'*','.'),2)
,replace(parsename(replace(replace(col,'.','#'),'*','.'),1),'#','.')
from tb

/*
-------- ------------- ------------- ----------------------------
张三 教师 1234567 zhang@123.net
(1 row(s) affected)
*/

drop table tb
回复
dawugui 2008-01-04
create table tb(col varchar(50))
insert into tb values('姓名*职位*电话*邮箱')
insert into tb values('张三*教师*1234567*zhang@123.net')
go
select
PARSENAME(replace(col,'*','.'),4),
PARSENAME(replace(col,'*','.'),3),
PARSENAME(replace(col,'*','.'),2),
PARSENAME(replace(col,'*','.'),1)
from tb

drop table tb

/*

-------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------
姓名 职位 电话 邮箱
NULL NULL NULL NULL

(2 行受影响)
*/
回复
-狙击手- 2008-01-04
declare @s varchar(8000)
set @s = '张三*教师*1234567*zhang@123.net '

select @s = replace(@s,'*',''',''')

exec('select '''+@s+'''')
/*

---- ---- ------- --------------
张三 教师 1234567 zhang@123.net
*/
回复
dawugui 2008-01-04
select 
PARSENAME(replace(col,'*','.'),4),
PARSENAME(replace(col,'*','.'),3),
PARSENAME(replace(col,'*','.'),2),
PARSENAME(replace(col,'*','.'),1)
from tb
回复
-狙击手- 2008-01-04
/*
---- ---- ---- ----
姓名 职位 电话 邮箱

*/
回复
-狙击手- 2008-01-04
declare @s varchar(8000)
set @s = '姓名*职位*电话*邮箱'

select @s = replace(@s,'*',''',''')

exec('select '''+@s+'''')
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告