我想从给定的字符串中提取特定的整数值 e.g。
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
现在只要'&'就可以正常工作出现在整数部分之后。有时没有'&'签署,然后这给了例外。
有人可以帮忙解决这个问题吗?
答案 0 :(得分: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
答案 1 :(得分: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
答案 2 :(得分:0)
你可以尝试附加'&amp;' (在每种情况下,使用CONCAT或您的DB-System需要的内容)
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