从SQL表中查询动态数据

时间:2014-05-01 15:12:20

标签: sql sql-server sql-server-2012

我正在使用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;

1 个答案:

答案 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) 

SQLFiddle