首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-12-24 
求高手解决sqlserver 提取字符问题!!!!从entity_index 这张表的dwgmc这一列中提取图中画出椭圆形的一连串

求高手解决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





1234567

select     case when charindex('(',dwgmc)>0 and charindex(')',dwgmc)>0 and charindex('(',dwgmc)<charindex(')',dwgmc)     then     substring(dwgmc,charindex('(',dwgmc)+1,char……



sorry,老大,我看错了在类似(0600-8022-501) 之前有些列还有其他的[color=#FF0000](这个中文状态下输入的括号,怎么也一起去掉???[/color]
[其他解释]
引用:
SQL code



1234567

select     case when charindex('(',dwgmc)>0 and charindex(')',dwgmc)>0 and charindex('(',dwgmc)<charindex(')',dwgmc)     then     substring(dwgmc,charindex('(',dwgmc)+1,char……


类似这样的中文状态下的括号,查询的时候显示的不是0602-9413-001这样的
[其他解释]
引用:
SQL code



1234567

select     case when charindex('(',dwgmc)>0 and charindex(')',dwgmc)>0 and charindex('(',dwgmc)<charindex(')',dwgmc)     then     substring(dwgmc,charindex('(',dwgmc)+1,char……




[其他解释]

create table tb20111110(dwgmc varchar(60))
insert into tb20111110
select '(aa)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 tb20111110
/*
dwgmc
------------------------
aa
0600-8022-505

0600-8022-501

(4 行受影响)
*/
alter table tb20111110 alter column dwgmc nvarchar(60) collate chinese_prc_ci_as_ws   

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 tb20111110 

/*
dwgmc
------------------------
0600-8022-501
0600-8022-505

0600-8022-501

(4 行受影响)
*/


让它区分宽度就可以了。
[其他解释]
引用:
SQL code



123456789101112131415161718192021222324252627282930313233343536373839404142434445

create table tb20111110(dwgmc varchar(60)) insert into tb20111110 select '(aa)011-钢梯T6-091(0600-802……


老大我又发了一个帖子http://bbs.csdn.net/topics/390276599

热点排行