日期:2014-05-17  浏览次数:20441 次

求高手解决sqlserver 提取字符问题!!!!


entity_index 这张表的dwgmc这一列中提取图中画出椭圆形的一连串数字(档号)如果没有档号的可以忽略。求高手帮忙急用!!!
------最佳解决方案--------------------

declare @t table (dwgmc varchar(48))
insert into @t
select '011-钢梯T6-091(0600-8022-501)[td-tl]{asdfsdf}' union all
select '011-钢梯T6-091(0600-8022-505)[td-tl213]{asdfsdf}' union all
select '011-钢梯T6-091[td-tl1231]{asdfsdf}' union all
select '011-钢梯T6-091(0600-8022-501)[td-tl123]{asdfsdf}'

select 
case when charindex('(',dwgmc)>0 and
charindex(')',dwgmc)>0
then 
substring(dwgmc,charindex('(',dwgmc)+1,charindex(')',dwgmc)-charindex('(',dwgmc)-1)
else '无' end as dwgmc
from @t
/*
dwgmc
------------------------------------------------
0600-8022-501
0600-8022-505

0600-8022-501
*/

------其他解决方案--------------------
找到'(' 和 ')'然后把中间截取出来?楼主是这个意思吗?
------其他解决方案--------------------
引用:
找到'(' 和 ')'然后把中间截取出来?楼主是这个意思吗?

就是把画红色的椭圆部分的例如0600-8022-501这样的提取出来
------其他解决方案--------------------
引用:
SQL code



1234567891011121314151617181920212223

declare @t table (dwgmc varchar(48)) insert into @t select '011-钢梯T6-091(0600-8022-501)[td-tl]{asdfsdf}' union allselect '011-钢梯T6-091(0600-802……


执行的时候报这个错误,请问什么原因呐?
消息 536,级别 16,状态 5,第 1 行
传递到 SUBSTRING 函数的长度参数无效。
------其他解决方案--------------------
数据里面是不是有)( 这种情况,括号是反的?
------其他解决方案--------------------
或者是(0600-8022-501) 之前还有其他的(?

数据不规则就不好判断了...
------其他解决方案--------------------
引用:
或者是(0600-8022-501) 之前还有其他的(?

数据不规则就不好判断了...


我就是执行了select case when charindex('(',dwgmc)>0 and charindex(')',dwgmc)>0     then substring(dwgmc,charindex('(',dwgmc)+1,charindex(')',dwgmc)-charindex('(',dwgmc)-1) else '无' end as dwgmc from entity_index 这句话报的错误!该怎么改?
------其他解决方案--------------------
引用:
或者是(0600-8022-501) 之前还有其他的(?

数据不规则就不好判断了...

没有反的也没有其他的( 
------其他解决方案--------------------

select 
case when charindex('(',dwgmc)>0 and charindex(')',dwgmc)>0 and charindex('(',dwgmc)<charindex(')',dwgmc)
then 
substring(dwgmc,charindex('(',dwgmc)+1,charindex(')',dwgmc)-charindex('(',dwgmc)-1) 
else '无' end as dwgmc 
from entity_index

你再试一试... 这个和数据有关系,应该是有部分特殊数据,但是我现在看不到特殊性。
------其他解决方案--------------------
引用:
SQL code