Sql server 解析SQL Server表中的URL以提取键和值对
我有一个带有URL字段的表。它包含来自客户站点的随机URL。我想从那些有查询字符串的URL中提取键和值。例如,如果我有: 我需要存储过程在结果中返回一个键和值Sql server 解析SQL Server表中的URL以提取键和值对,sql-server,Sql Server,我有一个带有URL字段的表。它包含来自客户站点的随机URL。我想从那些有查询字符串的URL中提取键和值。例如,如果我有: 我需要存储过程在结果中返回一个键和值 EdpNo=2580461 sku=B69-1412 SRCCODE=CANEMBP004 cm_mmc=Email-_-Retro-_-CANEMBP004-_-viewed 其中,EdpNo是键,2580461是第一个示例中的值 我已经看过一些用户定义的函数,但它们都致力于一次只传入一个url,我需要扫描表中的url字段 也许我只
EdpNo=2580461
sku=B69-1412
SRCCODE=CANEMBP004
cm_mmc=Email-_-Retro-_-CANEMBP004-_-viewed
其中,EdpN
o是键,2580461
是第一个示例中的值
我已经看过一些用户定义的函数,但它们都致力于一次只传入一个url,我需要扫描表中的url字段
也许我只是不知道如何使用它们,所以任何关于我所拥有的或者如何重组它的见解都将不胜感激
UDF:
如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮(
{}
),以很好地格式化和语法突出显示它!您可能需要查看APPLY
操作符,以便一次处理整个表<代码>从交叉应用[dbo].[SplitQueryString]()中选择splits.keyname,splits.keyvalue作为splits是您正在寻找的语法类型使用正则表达式来解析tsql代码。您可能已经意识到这一点,但这类操作的性能将很差。SQL Server将对您的表执行表扫描,并使用您的UDF解析每个URL(UDF反过来使用迭代/递归查询)。如果您的表很大,则使用SQL Server执行此操作需要很长时间。如果你有能力使用CLR程序来做这件事,那么你就想把这条路线当作一个选项。@死区谢谢,我正在看另一种不依赖于SQL Server表扫描的方法…JavaScript函数来拉键值,然后我将把它存储在一个表中。
ALTER FUNCTION [dbo].[SplitQueryString] (@s varchar(8000))
RETURNS table
AS
RETURN (
WITH splitter_cte AS (
SELECT CHARINDEX('&', @s) as pos, 0 as lastPos
UNION ALL
SELECT CHARINDEX('&', @s, pos + 1), pos
FROM splitter_cte
WHERE pos > 0
),
pair_cte AS (
SELECT chunk,
CHARINDEX('=', chunk) as pos
FROM (
SELECT SUBSTRING(@s, lastPos + 1,
case when pos = 0 then 80000
else pos - lastPos -1 end) as chunk
FROM splitter_cte) as t1
)
SELECT substring(chunk, 0, pos) as keyName,
substring(chunk, pos+1, 8000) as keyValue
FROM pair_cte
);