我有一个小问题要问
我在数据库列中有以下数据。
isLoggedIn = False& CurrentReferral = http://ufone.testSite.tv/Messaging.aspx?aspxerrorpath = / abc.aspx& kw =& FirstVisitDate = 10/10/2011 6:52:38 AM& FirstReferral = http://www.testSite.tv/CustomerCare.aspx?link=CustomerCare&ExternalReferrer=http://www.testSite.tv/CustomerCare.aspx?link=CustomerCare,http://testSite.tv/Signin.aspx& UserTotalVisits = 2& ContactId = 819& tenantChannelName = Ufone GSM channel& tenantChannelUrl = http://ufone.testSite.tv/& mcid =& ASP.NET_SessionId = ksntwa55yh3u3s45xn5rysyj& IsVisitTracked = yes
我需要做的只是从那里得到'ExternalReferrer', 喜欢
ExternalReferrer = HTTP://www.testSite.tv/CustomerCare.aspx链路= CustomerCare,HTTP://testSite.tv/Signin.aspx& UserTotalVisits = 2及的ContactID = 819&安培; tenantChannelName =商Ufone GSM频道& tenantChannelUrl = http://ufone.testSite.tv/
我尝试了子字符串,但没有得到那个
declare @myData nvarchar (1000)
set @myData= 'isLoggedIn=False&CurrentReferral=http://ufone.testSite.tv/Messaging.aspx?aspxerrorpath=/abc.aspx&kw=&FirstVisitDate=10/10/2011 6:52:38 AM&FirstReferral=http://www.testSite.tv/CustomerCare.aspx?link=CustomerCare&ExternalReferrer=http://www.testSite.tv/CustomerCare.aspx?link=CustomerCare,http://testSite.tv/Signin.aspx&UserTotalVisits=2&ContactId=819&tenantChannelName=Ufone GSM channel&tenantChannelUrl=http://ufone.testSite.tv/&mcid=&ASP.NET_SessionId=ksntwa55yh3u3s45xn5rysyj&IsVisitTracked=yes'
SELECT SUBSTRING(@myData, CHARINDEX ('ExternalReferrer' ,@myData ), CHARINDEX ('mcid' ,@myData )) AS Initial
使用sql 2008
答案 0 :(得分:1)
SUBSTRING
的第三个参数是要返回的字符串的长度,因此您必须从&mcid
的位置减去external
的位置:
select
substring
(
@mydata,
charindex('external', @mydata),
charindex('&mcid', @mydata) - charindex('external', @mydata)
)
编辑:
您在运行我的SQL语句的数据是什么?
我使用了你问题中的MyData
声明。
这段代码在我的SQL Server Management Studio 2008中的计算机上运行,并返回所需的输出,如您的问题所示:
declare @myData nvarchar (1000)
set @myData= 'isLoggedIn=False&CurrentReferral=http://ufone.testSite.tv/Messaging.aspx?aspxerrorpath=/abc.aspx&kw=&FirstVisitDate=10/10/2011 6:52:38 AM&FirstReferral=http://www.testSite.tv/CustomerCare.aspx?link=CustomerCare&ExternalReferrer=http://www.testSite.tv/CustomerCare.aspx?link=CustomerCare,http://testSite.tv/Signin.aspx&UserTotalVisits=2&ContactId=819&tenantChannelName=Ufone GSM channel&tenantChannelUrl=http://ufone.testSite.tv/&mcid=&ASP.NET_SessionId=ksntwa55yh3u3s45xn5rysyj&IsVisitTracked=yes'
select
substring
(
@mydata,
charindex('external', @mydata),
charindex('&mcid', @mydata) - charindex('external', @mydata)
)
编辑2:
SUBSTRING
的第二个参数指定返回字符的起始位置
在我的第一个答案中,由于charindex(...)
,这是“ExternalReferrer =”的第一个字符。
如果要从结果中省略“ExternalReferrer =”,则只需将此字符串的长度添加到第二个SUBSTRING
参数,以便返回的字符串在后直接开始>“ExternalReferrer =”:
select
substring
(
@mydata,
charindex('external', @mydata) + len('externalreferrer='),
charindex('&mcid', @mydata) - charindex('external', @mydata)
)
编辑3:
我的错误。
在我的上一次编辑中,我将返回字符的起始位置移动到右侧
但是我没有改变返回字符串的长度,所以当然结束位置也向右移动(这就是为什么再次返回&mcid=
的东西)
解决方案不仅是将“ExternalReferrer =”的长度添加到起始位置,还要将其从结束位置中减去:
select
substring
(
@mydata,
charindex('external', @mydata) + len('externalreferrer='),
charindex('&mcid', @mydata) - charindex('external', @mydata) - len('externalreferrer=')
)
答案 1 :(得分:1)
我相信这就是你想要的:
SELECT SUBSTRING(@myData, PATINDEX('%ExternalReferrer%' ,@myData ), PATINDEX('%mcid%' ,@myData ) - PATINDEX('%ExternalReferrer%' ,@myData ) - 1) AS Initial
但是对于该字符串非常具体,所以如果你的网址中有另一个'mcid'字符串,你需要小心。
答案 2 :(得分:1)
如果您知道每次mcid
将在ExternalReferrer
之后出现,请尝试在asp.net
代码中运行此正则表达式:
/ExternalReferrer=(.*)&mcid/
匹配组$1
将为您提供您正在寻找的价值。