各位,有个字符串0.6*1219*1287/0.6*1219*1433/0.6*1219*1615/0.6*1219*1400/0.6*1219*1043,我想提取每个/前的子字符串,比如0.6*1219*1287,并且在每个子字符串里提取*前后的字符,如0.6,1219,1287,怎么实现啊
------解决方案--------------------
pos,left函数结合用塞
------解决方案--------------------
呵呵,同意楼上的,用pos和mid也行,写个循环慢慢执行吧。呵呵
------解决方案--------------------
- SQL code
--给你数据库中拆分表方法--> --> (Roy)生成測試數據 if not object_id('Tab') is null drop table TabGoCreate table Tab([Col1] int,[COl2] nvarchar(5))Insert Tabselect 1,N'a,b,c' union allselect 2,N'd,e' union allselect 3,N'f'GoSQL2000用辅助表:if object_id('Tempdb..#Num') is not null drop table #Numgoselect top 100 ID=Identity(int,1,1) into #Num from syscolumns a,syscolumns bSelect a.Col1,COl2=substring(a.Col2,b.ID,charindex(',',a.Col2+',',b.ID)-b.ID) from Tab a,#Num bwhere charindex(',',','+a.Col2,b.ID)=b.ID --也可用 substring(','+a.COl2,b.ID,1)=','SQL2005用Xml:select a.COl1,b.Col2from (select Col1,COl2=convert(xml,''+replace(COl2,',','')+'') from Tab)aouter apply (select Col2=C.v.value('.','nvarchar(100)') from a.COl2.nodes('/root/v')C(v))bSQL05用CTE:;with roy as (select Col1,COl2=cast(left(Col2,charindex(',',Col2+',')-1) as nvarchar(100)),Split=cast(stuff(COl2+',',1,charindex(',',Col2+','),'') as nvarchar(100)) from Tabunion allselect Col1,COl2=cast(left(Split,charindex(',',Split)-1) as nvarchar(100)),Split= cast(stuff(Split,1,charindex(',',Split),'') as nvarchar(100)) from Roy where split>'')select COl1,COl2 from roy order by COl1 option (MAXRECURSION 0)生成结果:/*Col1 COl2----------- -----1 a1 b1 c2 d2 e3 f*/
------解决方案--------------------
string ls_str = '0.6*1219*1287/0.6*1219*1433/0.6*1219*1615/0.6*1219*1400/0.6*1219*1043'
string ls_arr[]
long ll_pos, i = 0 , ll_start
ls_str += "*"
ll_pos = pos(ls_str,'*')
ll_start = 1
do while ll_pos > 0 and ll_pos <= len(ls_str)
i++
ls_arr[i] = mid(ls_str,ll_start,ll_pos - ll_start)
ll_start = ll_pos + 1
ll_pos = pos(ls_str,'*',ll_start)
loop
ls_arr[]就是你要提取的字符串
------解决方案--------------------
晕,楼主,人家楼上写的这么详细了,你稍微改动下就可以了啊,你把那个函数里面的*替换成/,再照上面执行一下代码塞
------解决方案--------------------
- C/C++ code
public function long uf_parsetoarray (string as_source, string as_delimiter, ref string as_array[]);long ll_dellenlong ll_poslong ll_countlong ll_startlong ll_lengthstring ls_holderlong ll_nullif ((isnull(as_source)) or (isnull(as_delimiter))) then setnull(ll_null) return ll_nullend ifif trim(as_source) = "" then return 0end ifll_dellen = len(as_delimiter)ll_pos = pos(upper(as_source),upper(as_delimiter))if ll_pos = 0 then as_array[1] = as_source return 1end ifll_count = 0ll_start = 1do while ll_pos > 0 ll_length = ll_pos - ll_start ls_holder = mid(as_source,ll_start,ll_length) ll_count ++ as_array[ll_count] = ls_holder ll_start = ll_pos + ll_dellen ll_pos = pos(upper(as_source),upper(as_delimiter),ll_start) loopls_holder = mid(as_source,ll_start,len(as_source))if len(ls_holder) > 0 then ll_count ++ as_array[ll_count] = ls_holderend ifreturn ll_countend function