create table test (chr varchar(1000))insert into test values(
'123456789序号 急诊医学科243986程里 015902ZZZZZZZZZZZZZZZ一般物理降温 次 ')insert into test values(
'123456789 急诊医学科243986程里 000108X00041650100010注射用头孢西丁钠 支 ') 想得到的查询结果为多列:
123456789序号 ,急诊医学科,243986程里 ,015902ZZZZZZZZZZZZZZZ,一般物理降温 ,次
123456789 ,急诊医学科243986程里 ,000108X00041650100010,注射用头孢西丁钠 ,支
注意:中文的字数不定
'123456789序号 急诊医学科243986程里 015902ZZZZZZZZZZZZZZZ一般物理降温 次 ')insert into test values(
'123456789 急诊医学科243986程里 000108X00041650100010注射用头孢西丁钠 支 ') 想得到的查询结果为多列:
123456789序号 ,急诊医学科,243986程里 ,015902ZZZZZZZZZZZZZZZ,一般物理降温 ,次
123456789 ,急诊医学科243986程里 ,000108X00041650100010,注射用头孢西丁钠 ,支
注意:中文的字数不定
insert into @t
select 'aa,bb,bb' union all
select 'AAA,BBB' union all
select 'AAA'
drop table #t
declare @i int,@s varchar(1000)
set @i=0
select col into #t from @t
while @@rowcount>0
begin
set @i=@i+1
set @s='alter table #t add col'+cast(@i as varchar)+' varchar(100)'
exec(@s)
set @s='update #t set col'+cast(@i as varchar)+'=left(col,charindex('','',col+'','')-1),
col=stuff(col,1,charindex('','',col+'',''),'''')
where col>'''''
print @s
exec(@s)
end
select * from #t
你就可以象那样兄弟那样用了
二,执行完后,关于第三列,你的是有规律的其实excel最好处理了
你的结果,就连规则都没有,第一行6列,第二行5列,灰机搞大了
123456789序号 ,急诊医学科,243986程里 ,015902ZZZZZZZZZZZZZZZ,一般物理降温 ,次
123456789 ,急诊医学科243986程里 ,000108X00041650100010,注射用头孢西丁钠 ,支
insert into test values(
'123456789序号 急诊医学科243986程里 015902ZZZZZZZZZZZZZZZ一般物理降温 次 ')insert into test values(
'123456789 急诊医学科243986程里 000108X00041650100010注射用头孢西丁钠 支 ')
create function f_getstr(@str varchar(1000))
returns varchar(1000)
begin
declare @str1 varchar(1000)
set @str1=''
set @str=rtrim(ltrim(@str))
while charindex(' ',@str)>0
begin
set @str1=@str1+'.'+left(@str,charindex(' ',@str)-1)
set @str=ltrim(right(@str,len(@str)-charindex(' ',@str)))
end
return stuff(@str1,1,1,' ')+'.'+@str
end
select parsename(dbo.f_getstr(chr),4) as a,parsename(dbo.f_getstr(chr),3) as b,
parsename(dbo.f_getstr(chr),2) as c,parsename(dbo.f_getstr(chr),1) as d
from testdrop function f_getstr/*
a b c d
--------------- --------------------------- ----------------------------------------------- --------------
123456789序号 急诊医学科243986程里 015902ZZZZZZZZZZZZZZZ一般物理降温 次
123456789 急诊医学科243986程里 000108X00041650100010注射用头孢西丁钠 支
select dbo.f_t(chr,',') from test;alter function f_t(@v varchar(1000),@split char(1))
returns varchar(1000)
as
begin
declare @ret varchar(1000);
declare @i int;
declare @ts varchar(100);
set @ret='';
set @v=LTRIM(@v)+' ';
while LEN(@v)>0
begin
set @i=PATINDEX ('%[ ]%',@v);
set @ts=LEFT(@v,@i);
set @ret+=@split+@ts;
set @v=RIGHT(@v,LEN(@v)-@i+1);
set @v=ltrim(@v);
end
return @ret;
end/*
----------------------------------------------------------------------------
,123456789序号 ,急诊医学科243986程里 ,015902ZZZZZZZZZZZZZZZ一般物理降温 ,次
,123456789 ,急诊医学科243986程里 ,000108X00041650100010注射用头孢西丁钠 ,支 */
比如:015902ZZZZZZZZZZZZZZZ一般物理降温,这一段就没有被分成两列。数据本身已经是被存在DB中的,现在需要分割开来。7楼明白我的意思。
不服不行。。
结合9楼的方式,这个是第一步。
第二步就是处理015902ZZZZZZZZZZZZZZZ,拆成两列前6位是一列,后面的是一列。
理想结果如下:
015902,ZZZZZZZZZZZZZZZ
这个不复杂,我就不献丑写code了,楼下的兄弟,加油。。
原数据:
'123456789序号 急诊医学科243986程里 015902ZZZZZZZZZZZZZZZ一般物理降温 次 ')'123456789 急诊医学科243986程里 000108X00041650100010注射用头孢西丁钠 支 ')
需求数据:
123456789序号 ,急诊医学科,243986程里 ,015902ZZZZZZZZZZZZZZZ,一般物理降温 ,次
123456789 ,急诊医学科243986程里 ,000108X00041650100010,注射用头孢西丁钠 ,支
第一行:急诊医学科,243986程里
第二行:急诊医学科243986程里
这个程序是分不开了,其它了可以按要求显示