-1

特定の文字列から特定の整数値を抽出したい

http://start.mysearchdial.com/results.php?q=hovercrafting+manchester&category=web&a=coolmsd&f=2&cd=2&XzuyEtN2Y1L1QzuyEzzyD0&cr=1818627175&uref=14&start=1

上記の文字列から、文字列の「cd = 2」部分から「2」を抽出したいと思います。私が使用しているコードは

DECLARE @URL VARCHAR(4000) 
SET @URL = 'http://start.mysearchdial.com/results.php?q=hovercrafting+manchester&category=web&a=coolmsd&f=2&cd=2&XzuyEtN2Y1L1QzuyEzzyD0&cr=1818627175&uref=14&start=1'
SELECT Case WHEN CHARINDEX('cd=',@URL)>0 
    THEN SUBSTRING(SUBSTRING(@URL,CHARINDEX('cd=',@URL),CHARINDEX('cd=',@URL)-1),4,CHARINDEX('&',SUBSTRING(@URL,CHARINDEX('cd=',@URL),CHARINDEX('cd=',@URL)-1))-4) 
    ELSE NULL 
END

'&' が整数部分の後に表示される限り、これは正常に機能します。「&」記号がない場合があり、これにより例外が発生します。

このシナリオの処理方法について誰か助けてもらえますか?

4

3 に答える 3

2

テキストを抽出するには、次のようにします。

DECLARE @URL VARCHAR(4000) 
SET @URL = 'http://start.mysearchdial.com/results.php?q=hovercrafting+manchester&category=web&a=coolmsd&f=2&cd=2&XzuyEtN2Y1L1QzuyEzzyD0&cr=1818627175&uref=14&start=1'

DECLARE @QSXML xml
SET @QSXML = CAST('<a><b>' + REPLACE(SUBSTRING(@URL,CHARINDEX('?',@URL)+1,4000),'&','</b><b>') + '</b></a>' as xml)

select
    SUBSTRING(c.value('.','varchar(4000)'),4,4000)
from @QSXML.nodes('/a/b') t(c)
where
    c.value('.','varchar(4000)') like 'cd=%'

このようにする理由は、クエリ文字列から複数の値を抽出する必要がある場合に備えています。最終的SELECTなものを切り替えて、キーと値のテーブルを生成できます。(私はすでにそうしていたでしょうが、XzuyEtN2Y1L1QzuyEzzyD0パラメーターには値がなく、それをどうするかを決めることができませんでした)。


@QSXMLこれは、表形式の結果を返す代替クエリ (上記と同じように使用) です。

;With ShreddedNodes as (
    select
        c.value('.','varchar(4000)') as ParmAndValue
    from @QSXML.nodes('/a/b') t(c)
), Splits as (
    select ParmAndValue,CHARINDEX('=',ParmAndValue) as Split
    from ShreddedNodes
), KeysAndValues as (
    select
        CASE WHEN Split > 0
            THEN SUBSTRING(ParmAndValue,1,Split-1)
        ELSE
            ParmAndValue
        END as [Key],
        CASE WHEN Split > 0
            THEN SUBSTRING(ParmAndValue,Split+1,4000)
        END as Value
    from Splits
)
select * from KeysAndValues

プロデュース:

Key                                Value
---------------------------------- --------------------------------------------------
q                                  hovercrafting+manchester
category                           web
a                                  coolmsd
f                                  2
cd                                 2
XzuyEtN2Y1L1QzuyEzzyD0             NULL
cr                                 1818627175
uref                               14
start                              1
于 2013-08-06T06:55:25.757 に答える
0

これを試して:

DECLARE @URL VARCHAR(4000) 

SET @URL = 
'http://start.mysearchdial.com/results.php?q=hovercrafting+manchester&category=web&a=coolmsd&f=2&XzuyEtN2Y1L1QzuyEzzyD0&cr=1818627175&uref=14&start=1&cd=2'

SELECT CASE 
         WHEN Charindex('cd=', @URL) > 0 THEN 
           CASE 
             WHEN Charindex('&', @URL, Charindex('cd=', @URL) + 3) > 0 THEN 
             Substring(@URl, Charindex('cd=', @URL) + 3, Charindex('&', @URL, 
           Charindex('cd=', 
           @URL) + 3) - Charindex('cd=', @URL) - 3) 
             ELSE Substring(@URL, Charindex('cd=', @URL) + 3, 
                         Len(@URL) - Charindex('cd=', @URL) + 3) 
           END 
         ELSE NULL 
       END 

go 
于 2013-08-06T06:40:53.703 に答える
0

いずれの場合も、url に「&」(CONCAT またはそのために DB システムが必要とするもの) を追加することができます。

DECLARE @URL VARCHAR(4000) 
SET @URL = 'http://start.mysearchdial.com/results.php?q=hovercrafting+manchester&category=web&a=coolmsd&f=2&cd=2&XzuyEtN2Y1L1QzuyEzzyD0&cr=1818627175&uref=14&start=1'
SELECT Case WHEN CHARINDEX('cd=',@URL)>0 
    THEN SUBSTRING(SUBSTRING(CONCAT(@URL, '&'),CHARINDEX('cd=',CONCAT(@URL, '&')),CHARINDEX('cd=',CONCAT(@URL, '&'))-1),4,CHARINDEX('&',SUBSTRING(CONCAT(@URL, '&'),CHARINDEX('cd=',CONCAT(@URL, '&')),CHARINDEX('cd=',CONCAT(@URL, '&'))-1))-4) 
    ELSE NULL 
END
于 2013-08-06T06:55:02.420 に答える