4

URLが変数に格納されているという意味で、クエリ文字列を取得できるSQL関数を探しています。

実際には、url を含む列を更新し、url の特定のクエリ文字列をエンコードするトリガーを作成する必要があるため、その特定のクエリ文字列をエンコードするには、まずクエリ文字列の値を抽出する必要があります。

まあ言ってみれば

@url = 'mypage.php?name=This is test&address=Test Address&phone=+9779854125896'

次に、次のようなSQL関数が必要です

select getURLparams('name', @url)

それは返すべき

This is test

そして、特定のクエリ文字列を削除する方法。更新されたものを追加できます。

私は SQL Sever 2008 R2 を使用しています。

4

3 に答える 3

6

パラメータとしてクエリ文字列名を持つクエリ文字列値を返す以下のクエリを試してください:

declare @url nvarchar(max) = 'mypage.php?name=This is test&address=Test Address&phone=+9779854125896'

declare @param nvarchar(max)='phone'

SELECT 
    (CASE WHEN CHARINDEX('&', v)>0 THEN SUBSTRING(v, 0, CHARINDEX('&', v))
    ELSE V END)
FROM(
    SELECT SUBSTRING(@url, CHARINDEX(@param+'=', @url)+LEN(@param)+1, len(@url)) v
    WHERE CHARINDEX('&'+@param+'=', REPLACE(@url, '?', '&'))>0
)x

既存のクエリ文字列の値を変更するには、次を試してください。

declare @url nvarchar(max) = 'mypage.php?name=This is test&address=Test Address&phone=+9779854125896'

declare @param nvarchar(max)='name'
declare @NewValu nvarchar(max)='Test'


SELECT 
    REPLACE(@url, Ch+vv, Ch+@NewValu)
FROM(
    SELECT  
        (CASE WHEN CHARINDEX('&', v)>0 then SUBSTRING(v, 0, CHARINDEX('&', v))
        ELSE V END) vv,
        (CASE WHEN CHARINDEX('?'+@param+'=', @url)>0 
                    THEN '?'+@param+'='
                    ELSE '&'+@param+'=' END) Ch
    FROM(
        SELECT SUBSTRING(@url, CHARINDEX(@param+'=', @url)+LEN(@param)+1, len(@url)) v
        WHERE CHARINDEX('&'+@param+'=', REPLACE(@url, '?', '&'))>0
    )x
)xx
于 2013-09-23T06:46:22.613 に答える
0

Regex を使用する CLR 関数を作成する必要があります。詳細については、 SQL Server: 正規表現を参照してください。

于 2013-09-23T06:45:16.010 に答える
0
declare @url as varchar(800)
set @url = 'mypage.php?name=This is test&address=Test Address&phone=+9779854125896'
declare @name as varchar(800)
set @name='name'

select SUBSTRING(@url,CHARINDEX(@name,@url,1)+len(@name)+1,
            convert(int,CHARINDEX('&',@url,1))-convert(int,CHARINDEX(@name,@url,1)+len(@name))-1)
于 2013-09-23T06:54:42.353 に答える