ローカル DB にコピーする必要がある外部サイトにテーブルがありますが、いくつかの変換が必要です。大幅に変更する必要がある列の 1 つは、product_url と呼ばれます。URL の形式は、site.com\category\sub-category\brand\model# です。
私のローカル データベースのテーブルには、このデータを保持するための 4 つの列があります。それらは、カテゴリ、サブカテゴリ、ブランド、およびモデル番号になります。そのため、最初に site.com をトリミングする必要があります (truncate を使用してこれを行いました) が、\category\sub-category\brand\model# を解析する必要があります。
SO から UDF を見つけました。これが役立つと思います。ここにあります:
create function dbo.SplitString
(
@str nvarchar(4000),
@separator char(1)
)
returns table
AS
return (
with tokens(p, a, b) AS (
select
1,
1,
charindex(@separator, @str)
union all
select
p + 1,
b + 1,
charindex(@separator, @str, b + 1)
from tokens
where b > 0
)
select
p-1 zeroBasedOccurance,
substring(
@str,
a,
case when b > 0 then b-a ELSE 4000 end)
AS s
from tokens
)
GO
現在、この機能の使用に問題があります。おそらくUDFの経験が不足しているためです。
これが私が今持っているものです:
select s from
dbo.SplitString(select substring(product_url, 8, len(product_url))
from Products, '/')
where zeroBasedOccurance=0 AS Category
これは明らかに構文的にも正しくありません。
私はこれが最善の方法であるかどうか疑問に思っています。私はまだ DBA に慣れていないので、この問題に頭を悩ませています。このUDFをproduct_urlテーブルの各行に最大4回適用する方法を理解する必要があります。