Sql 从url字符串中提取整数值
我想从给定的字符串中提取特定的整数值 e、 g 从上面的字符串中,我想从字符串的“cd=2”部分提取“2”。我使用的代码是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&
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