Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从url字符串中提取整数值_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 从url字符串中提取整数值

Sql 从url字符串中提取整数值,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我想从给定的字符串中提取特定的整数值 e、 g 从上面的字符串中,我想从字符串的“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&

我想从给定的字符串中提取特定的整数值 e、 g

从上面的字符串中,我想从字符串的“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
现在只要在整数部分后面出现“&”,就可以了。有时没有“&”符号,这就产生了例外

有人能帮你解决这个问题吗?

试试这个:

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 
在任何情况下,您都可以尝试在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

我会这样做来提取文本:

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=%'
产生:

Key                                Value
---------------------------------- --------------------------------------------------
q                                  hovercrafting+manchester
category                           web
a                                  coolmsd
f                                  2
cd                                 2
XzuyEtN2Y1L1QzuyEzzyD0             NULL
cr                                 1818627175
uref                               14
start                              1

为什么要在数据库中这样做?肯定还有其他代码比SQL具有更好的文本处理功能?另外,如果您坚持使用SQL解决方案,您使用的是什么数据库系统?(看起来可能是SQL Server,但不是100%确定)@user467710整数部分后面可能出现的其他字符是什么?它的SQL Server 2008,我在存储过程中使用它。@user467710我不确定其他字符,但主要是它出现的“X”。
;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