--示例--示例数据
create table table1(col1 int,col2 varchar(20))
insert table1 select 101,'1.2'
union  all    select 102,'1'
union  all    select 103,'1.3.5'create table TABLE2(col1 int,col2 varchar(10))
insert table2 select 1,'A'
union  all    select 2,'B'
union  all    select 3,'C'
union  all    select 4,'D'
union  all    select 5,'E'
go--创建处理函数
create function f_str(
@col2 varchar(100)
)returns varchar(8000)
as
begin
declare @r varchar(8000)
set @r=replace('.'+@col2+'.','..','.')
select @r=replace(@r,'.'+cast(col1 as varchar)+'.','.'+col2+'.')
from table2
where charindex('.'+cast(col1 as varchar)+'.',@r)>0
return(substring(@r,2,len(@r)-2))
end
go--调用函数实现查询
select col1,col2=dbo.f_str(col2) from table1
go--删除测试
drop table table1,table2
drop function f_str/*--测试结果col1        col2       
----------- -----------
101         A.B
102         A
103         A.C.E(所影响的行数为 3 行)
--*/

解决方案 »

  1.   

    只要思路清晰﹐是不難的。
    首先﹐結果的左邊是TABLE1的第一個字段﹐這一點就不要說了。
    只看結果的右邊是怎么來的了。
    根據題意﹐可以看出結果的右邊是根據TABLE1表中的第二個字段的內容(把它的內容根據"."分開來﹐存在一個數組AA中﹐具體做法用AT函數應該可以做到)
    在TABLE2表中的查找第一個字段內容與AA數組相同的內容﹐然后把它的第二個字段內容取出(如果有多個﹐用"."連接起來﹐存于變量BB中)
    BB中的內容即為結果的右邊的內容
      

  2.   

    怎么得不到正确的结果,请帮我分析一下.
    结果跟没有转换时是一样的.alter function f_str(
    @col2 varchar(100)
    )returns varchar(8000)
    as
    begin
    declare @r varchar(8000)
    set @r=replace('.'+@col2+'.','..','.')
    select @r=replace(@r,'.'+SALESNO + '.','.'+SALESNAME+'.')
    from BASE_SALES where charindex('.'+SALESNO +'.',@r)>0 
    return(substring(@r,2,len(@r)-2))
    end
    go
    select SalePoNo,SaleDate,TotalAmount,CustormNo, 
    case when SaleReFlag=0 then '正常销售'  when SaleReFlag=1 then '销售退货' end as SaleReFlag,
    SalesMan=DBO.F_STR(SalesMan) from ISS_SaleMain 
    where SaleDate between '2004-9-5' and '2004-10-6' AND SALESMAN<>''