0

私は今まで私のために働いている次のクエリを持っています。

    with tmp(product_id , Token, product_name) as (
    select product_id,  cast ( LEFT(product_name, CHARINDEX(' ',product_name+' ')-1) as varchar(100)),
        STUFF(product_name, 1, CHARINDEX(' ',product_name+' '), '')
    from Products 
    union all
    select product_id, cast (LEFT(product_name, CHARINDEX(' ',product_name+' ')-1) as varchar(100)),
        STUFF(product_name, 1, CHARINDEX(' ',product_name+' '), '')
    from tmp
    where product_name > ''
    )

    select product_id, Token from tmp

これにより、製品名がスペースで分割され、レコードとして提供されます。

しかし今、製品名をスペースだけでなく、スペース、ハイフン、コンマで区切る必要があります。これを達成する方法がわかりません。

どんな種類の助けも常に感謝しています。

編集 - 例

製品テーブルに次のものが含まれている場合

product_id, product_name
1, JVC-600.BLACK
2, M cb-588

それから私は必要です

product_id, token
1, JVC
1, 600
1, BLACK
2, M
2, cb
2, 588

結果として。

4

2 に答える 2

1

スペースに対して機能するクエリがある場合、非常に簡単な変更は、他の文字もスペースにすることです。

with Prod2 as (
  select *, product_name2 = replace(replace(product_name,'.',' '),'-',' ')
  from products
)
,tmp(product_id , Token, product_name) as (
select product_id,  cast ( LEFT(product_name2, CHARINDEX(' ',product_name2+' ')-1) as varchar(100)),
    STUFF(product_name2, 1, CHARINDEX(' ',product_name2+' '), '')
from Prod2 
union all
select product_id, cast (LEFT(product_name, CHARINDEX(' ',product_name+' ')-1) as varchar(100)),
    STUFF(product_name, 1, CHARINDEX(' ',product_name+' '), '')
from tmp
where product_name > ''
)

select product_id, Token from tmp
于 2013-05-09T07:00:24.283 に答える