#asp.net #sql #sql-server #sql-server-2005 #sql-server-2008
#asp.net #sql #sql-сервер #sql-server-2005 #sql-server-2008
Вопрос:
у меня есть небольшой вопрос
у меня есть следующие данные в столбце базы данных.
isLoggedIn=Falseamp;CurrentReferral=http://ufone.testSite.tv/Messaging.aspx?aspxerrorpath=/abc.aspxamp;kw=amp;FirstVisitDate= 10/10/2011 6:52:38 УТРАamp;FirstReferral=http://www.TestSite.tv/CustomerCare.aspx?ссылка=CustomerCareamp;ExternalReferrer=http://www.TestSite.tv/CustomerCare.aspx?link=CustomerCare,http://testSite.tv/Signin.aspxamp;UserTotalVisits=2amp;ContactId=819amp;tenantChannelName=Ufone GSM channelamp;tenantChannelUrl=http://ufone.testSite.tv/amp;mcid=amp;ASP.NET_SessionId=ksntwa55yh3u3s45xn5rysyjamp;IsVisitTracked=yes
что мне нужно сделать, так это получить только ‘ExternalReferrer’ из этого, например
ExternalReferrer=http://www.TestSite.tv/CustomerCare.aspx?link=CustomerCare,http://testSite.tv/Signin.aspxamp;UserTotalVisits=2amp;ContactId=819amp;tenantChannelName=Ufone GSM канал и tenantChannelUrl=http://ufone.TestSite.tv/
я пробовал вложенную строку, но не смог получить это
declare @myData nvarchar (1000)
set @myData= 'isLoggedIn=Falseamp;CurrentReferral=http://ufone.testSite.tv/Messaging.aspx?aspxerrorpath=/abc.aspxamp;kw=amp;FirstVisitDate=10/10/2011 6:52:38 AMamp;FirstReferral=http://www.testSite.tv/CustomerCare.aspx?link=CustomerCareamp;ExternalReferrer=http://www.testSite.tv/CustomerCare.aspx?link=CustomerCare,http://testSite.tv/Signin.aspxamp;UserTotalVisits=2amp;ContactId=819amp;tenantChannelName=Ufone GSM channelamp;tenantChannelUrl=http://ufone.testSite.tv/amp;mcid=amp;ASP.NET_SessionId=ksntwa55yh3u3s45xn5rysyjamp;IsVisitTracked=yes'
SELECT SUBSTRING(@myData, CHARINDEX ('ExternalReferrer' ,@myData ), CHARINDEX ('mcid' ,@myData )) AS Initial
я использую sql 2008
Комментарии:
1. Какую ошибку вы получаете — я скопировал и вставил ваш код, и он работал нормально
2. Он не выдает ошибки, но не возвращает желаемый результат (см. Раздел «что мне нужно сделать» в вопросе).
Ответ №1:
Третий параметр SUBSTRING
— это длина возвращаемой строки, поэтому вам нужно вычесть позицию amp;mcid
из позиции external
:
select
substring
(
@mydata,
charindex('external', @mydata),
charindex('amp;mcid', @mydata) - charindex('external', @mydata)
)
Редактировать:
С какими данными вы выполняете мою инструкцию SQL?
Я использовал MyData
объявление из вашего вопроса.
Этот фрагмент кода выполняется на моем компьютере в SQL Server Management Studio 2008 и возвращает точно желаемый результат, как показано в вашем вопросе:
declare @myData nvarchar (1000)
set @myData= 'isLoggedIn=Falseamp;CurrentReferral=http://ufone.testSite.tv/Messaging.aspx?aspxerrorpath=/abc.aspxamp;kw=amp;FirstVisitDate=10/10/2011 6:52:38 AMamp;FirstReferral=http://www.testSite.tv/CustomerCare.aspx?link=CustomerCareamp;ExternalReferrer=http://www.testSite.tv/CustomerCare.aspx?link=CustomerCare,http://testSite.tv/Signin.aspxamp;UserTotalVisits=2amp;ContactId=819amp;tenantChannelName=Ufone GSM channelamp;tenantChannelUrl=http://ufone.testSite.tv/amp;mcid=amp;ASP.NET_SessionId=ksntwa55yh3u3s45xn5rysyjamp;IsVisitTracked=yes'
select
substring
(
@mydata,
charindex('external', @mydata),
charindex('amp;mcid', @mydata) - charindex('external', @mydata)
)
РЕДАКТИРОВАТЬ 2:
Второй параметр SUBSTRING
определяет начальную позицию возвращаемых символов.
В моем первом ответе это был первый символ «ExternalReferrer=» из-за charindex(...)
.
Если вы хотите исключить «ExternalReferrer=» из результата, вам просто нужно добавить длину этой строки ко второму SUBSTRING
параметру, чтобы возвращаемая строка начиналась сразу после «ExternalReferrer=» :
select
substring
(
@mydata,
charindex('external', @mydata) len('externalreferrer='),
charindex('amp;mcid', @mydata) - charindex('external', @mydata)
)
РЕДАКТИРОВАТЬ 3:
Моя ошибка.
В моем последнем редактировании я переместил начальную позицию возвращаемых символов вправо.
Но я не менял длину возвращаемой строки, поэтому, конечно, конечная позиция также переместилась вправо (вот почему amp;mcid=
материал был возвращен снова)
Решение состоит не только в том, чтобы добавить длину «ExternalReferrer =» к начальной позиции, но и вычесть ее из конечнойпозиция также:
select
substring
(
@mydata,
charindex('external', @mydata) len('externalreferrer='),
charindex('amp;mcid', @mydata) - charindex('external', @mydata) - len('externalreferrer=')
)
Комментарии:
1. это то, что я получил сообщение 537, уровень 16, состояние 2, строка 2 Недопустимый параметр длины, переданный функции LEFT или SUBSTRING.
2. вау, это работает, но могу ли я исключить это внешнее из конечного результата?
3. @mahisama: Да, смотрите мой ответ (отредактированный снова). Если мой ответ был полезен, было бы неплохо, если бы вы приняли его как правильный ответ (и проголосовали за него, но вы пока не можете этого сделать, вам нужно 15 повторений. для этого).
4. я тоже получаю эту часть в результате.. amp;mcid=amp;ASP.NET_Se чего я не хочу
5. это последнее, что мне нужно. =(
Ответ №2:
Я считаю, что это то, что вы хотите:
SELECT SUBSTRING(@myData, PATINDEX('%ExternalReferrer%' ,@myData ), PATINDEX('%mcid%' ,@myData ) - PATINDEX('%ExternalReferrer%' ,@myData ) - 1) AS Initial
Но очень специфичен для этой строки, поэтому вам нужно быть осторожным, если у вас есть другая строка mcid в вашем URL.
Ответ №3:
Если вы знаете, что каждый раз mcid
будет сразу ExternalReferrer
после этого, попробуйте запустить это регулярное выражение в своем asp.net
коде:
/ExternalReferrer=(.*)amp;mcid/
Соответствующая группа $1
даст вам значение, которое вы ищете.r
Комментарии:
1. Это недопустимый оператор SQL
2. Теги, упомянутые в вопросе, также содержат
asp.net
, поэтому ответ содержит код, который может быть выполнен вasp.net