我正在寻找一个内联表值函数来解码 URL 编码字符(如 %20 用于空格)。参考
我看到了其他函数,但还没有看到一个内联表值函数。我很想在函数中编写一堆 REPLACE 语句,但我想知道是否有更好的方法。
CREATE FUNCTION dbo.itvfURLDecode
(
@StringValue VARCHAR(MAX)
)
RETURNS TABLE
AS
RETURN (
SELECT REPLACE(REPLACE(@StringValue,'%2B','+'),'%20',' ') /* etc..*/ AS DecodedValue
)
;WITH cteData AS
(
SELECT 'This%2Bis%20a%20test%3C%3E%20ok%3F%20100%25' AS example
)
SELECT
example, q.DecodedValue /* returns: This+is a test<> ok? 100% */
FROM cteData c
CROSS APPLY dbo.itvfURLDecode(example) q
虽然我不确定您的特定需求的性能,但这里有一个使用TranslationTable CTE 和递归 CTE 的示例,它将查找并替换传入字符串中的值到 TVF。
如果您注释掉
--where cnt = 0
TVF 的底部,您实际上可以看到递归 CTE 的进展