我在外部站点上有一个表,需要将其复制到本地数据库,但需要进行一些转换。我必须大量修改的列之一称为 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,所以我很难解决这个问题。我只需要弄清楚如何为 product_url 表中的每一行应用此 UDF 约 4 次。