我正在使用SQL Server 2012.
我想查询符合特定条件的特定SQL列的数据。此列包含用户输入的自由格式文本。用户可以输入他/她想要的任何内容,但始终包括可以在自由格式文本中的任何位置输入的URL。
每个网址都相似,包含一致的元素,例如域名,但也会引用网址中唯一的“文章ID”编号。将这些数字视为引用知识库文章。
文章ID是一个不同的编号,具体取决于所使用的文章,并定期创建新文章。
我需要一个查询来识别网址中的所有这些文章ID号。到目前为止我唯一开发的方法是使用SUBSTRING计算字符数,直到达到文章ID号。这是不可靠的,因为用户并不总是在开头包含URL。如果我能告诉SUBSTRING从URL的开头开始计数,而不管它在文本中的位置,那会更好。
例如,只要找到“HTTP://”或每个URL包含的公共关键字,它就会开始计数。另一种选择是如果我可以将URL提取到它自己的表中。我还没弄清楚如何在SQL中执行这些想法。
以下是我到目前为止的情况。
select
scl.number,
ol.accountnum,
scl.opendate as CallOpenDate,
sce.opendate as NoteEntryDate,
sce.notes,
substring(sce.notes, 102, 4) as ArticleID,
sclcc.pmsoft,
ol.territorydesc
from (select * from supportcallevent as sce
where sce.opendate > '2014-04-01 00:00:00.000') as sce
inner join supportcalllist as scl on scl.SupportCallID=sce.supportcallid
inner join organizationlist as ol on ol.partyid=scl.partyid
inner join supportcalllist_custcare as sclcc on sclcc.supportcallid=scl.supportcallid
where sce.notes like '%http://askus.how%'
order by ol.territorydesc, scl.number;
答案 0 :(得分:1)
您可以使用CHARINDEX
函数在字符串中查找URL并从那里开始子字符串。
此示例将获取url后的下4位数字:
DECLARE @str VARCHAR(100)
DECLARE @find VARCHAR(100)
SET @str = 'waawhbu aoffawh http://askus.how/1111 auwhauowd'
SET @find = 'http://askus.how/'
SELECT SUBSTRING(@str,CHARINDEX(@find, @str)+17,4)