在SQL Server 2005中解析QueryString

Bla*_*laM 2 sql-server parsing query-string

有没有一种简单的方法来解析SQL Server中的QueryString参数(例如foo = bar&temp = baz)?

我最终需要的是一个带有名称/值对的"表".

| foo  | bar |
| temp | baz |
Run Code Online (Sandbox Code Playgroud)

虽然在上面的例子中它很简单但是如果字符串开始包含转义字符(例如%3D)并且当涉及UTF-8时甚至更难,则变得更难.

现有解决方案吗?SQL Server的URLDecode实现将成为天堂.

Ste*_*man 7

因此,要解析查询字符串,只需在函数中使用CTE即可.这是代码.

CREATE 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
)
GO

declare @queryString varchar(2048)
set @queryString = 'foo=bar&temp=baz&key=value';
SELECT *
  FROM dbo.SplitQueryString(@queryString)
OPTION(MAXRECURSION 0);
Run Code Online (Sandbox Code Playgroud)

运行时产生以下输出.

keyName  keyValue
-------  --------
foo      bar
temp     baz
key      value
(3 row(s) affected)
Run Code Online (Sandbox Code Playgroud)

我相信这将完全符合您的要求.