Как получить параметры URL в SQL

Последнее обновление - 30.05.2021ru30.05.2021 1

Есть на входе строка URL. Необходимо извлечь из нее параметры.

Пример URL - https://falcon.web-automation.ru/project-concept?par1=444&name=132

Используем следующую функцию: 

alter FUNCTION dbo.str_DecomposeUrl 
(
    @input_string NVARCHAR(4000) 
)
RETURNS TABLE
AS
RETURN
(

    WITH CTE AS 
    (
        SELECT 
             SUBSTRING(@input_string, 1, NULLIF(CHARINDEX('?', @input_string) - 1, -1)) AS query_path 
            ,RIGHT(@input_string, LEN(@input_string) - NULLIF(CHARINDEX(N'#', @input_string), 0)  ) AS query_hash 
            ,SUBSTRING
            (
                 @input_string
                ,1
                ,COALESCE(NULLIF(CHARINDEX(N'#', @input_string), 0) - 1, LEN(@input_string) )
            ) AS PathWithoutHash 
    )
    ,CTE2 AS 
    (
        SELECT 
             CTE.query_path 
            ,CTE.query_hash 
            ,SUBSTRING
            (    PathWithoutHash
                ,CHARINDEX(N'?', PathWithoutHash) + 1 
                ,100000
            ) AS KeyValueString  
        FROM CTE 
    )
    ,Split(id, stpos, endpos, data, query_path, query_hash) 
    AS
    (
        SELECT 
             0 AS id 
            ,0 AS stpos 
            ,CHARINDEX(N'&', CTE2.KeyValueString) AS endpos 
            ,SUBSTRING(CTE2.KeyValueString, 0, COALESCE(NULLIF(CHARINDEX(N'&', CTE2.KeyValueString), 0), LEN(CTE2.KeyValueString)+1) ) AS data 
            ,CTE2.query_path 
            ,CTE2.query_hash 
        FROM CTE2 

        UNION ALL

        SELECT 
             Split.id + 1 AS id 
            ,Split.endpos + 1 AS stpos 
            ,CHARINDEX(N'&', CTE2.KeyValueString, Split.endpos+1) AS endpos 
            ,SUBSTRING(CTE2.KeyValueString, Split.endpos + 1, COALESCE(NULLIF(CHARINDEX(N'&', CTE2.KeyValueString, Split.endpos+1), 0), LEN(CTE2.KeyValueString)+1) - Split.endpos - 1) AS data  
            ,CTE2.query_path 
            ,CTE2.query_hash 
        FROM Split 
        CROSS JOIN CTE2 
        WHERE endpos > 0
    )
    SELECT 
         id
         -- ,stpos
         -- ,endpos
         -- ,SUBSTRING(@String, stpos, COALESCE(NULLIF(endpos, 0), LEN(@String)+1) - stpos) AS data_simple 
        ,data
        ,query_path 
        ,query_hash 
        ,SUBSTRING(data, 1, NULLIF(CHARINDEX('=', data), 0) -1) AS [key]
        ,SUBSTRING(data, NULLIF(CHARINDEX('=', data), 0) + 1, LEN(data)) AS value 
    FROM Split 
)

Использование: 

select * 
from dbo.str_DecomposeUrl('https://falcon.web-automation.ru/project-concept?par1=444&name=132')

Результат:

Источник: https://stackoverflow.com/questions/36208967/how-to-extract-url-querystring-parameters-in-sql-server-without-writing-a-functi


Другие темы

SQL-инструмент для создания личных кабинетов на сайте

Суть подхода и история создания Falcon Space

Платформа Falcon Space

Это снижение стоимости владения

за счет меньшего количества людей для поддержки

Это быстрое внесение изменений

по ходу эксплуатации программы

Это современный интерфейс

полная адаптация под мобильные устройства

Веб-приложения на MS SQL. Партнерская программа для разработчиков и веб-студий

Вы можете разрабатывать самостоятельно или сотрудничать с нами в плане веб-разработки на платформе Falcon Space, используя только SQL и HTML.
Смотреть примеры с кодом SQL
Документация по платформе
Демо-стенд компонентов
На стенде можно посмотреть различные компоненты в действии: таблицы, формы, модальные окна, диаграммы, карта и т.д.
Демо-сайт решений
Базисные решения, которые можно гибко адаптировать под себя: менять внешний вид, бизнес-логику и даже структуру базы данных.
Получить оценку проекта
Создайте концепцию проекта на основе нашего шаблона и получите оценку проекта в виде КП.