1

我希望你们中的一个知识渊博的人可以帮助我解决这个问题......

我的数据库中有一个包含 HTML 的字段。在此 HTML 中,每条记录中都有一个包含参数的链接。

例如。

<a href='http://mysite.com/clickme.aspx?ctid=31' title='Click Here !' target='_blank'>Click this link</a>

我只想返回记录的 ID,以及参数 CTid 的值(CTid 可以是 2 位到 12 位之间的任何值)

所以,我想要返回的是:

ID ¦ CTid ¦
73 ¦ 31   ¦

我试过使用 PATINDEX 但它对我没有用(因为我必须指定返回的字符串的长度)

SELECT id, SUBSTRING(content, PATINDEX('%CTid%', content), 12) AS CTid
FROM ARTICLES
WHERE content LIKE '%CTid%'

返回:

   ID ¦ CTid         ¦
   73 ¦ ctid=31' tit ¦

任何人都可以阐明这样做的好方法吗?

我将返回数千行,因此如果可能的话,我宁愿远离游标和密集操作。

非常感谢 :)

4

3 回答 3

1
SELECT ID, SUBSTRING(content, PATINDEX('%CTid%', content) + 5, PATINDEX('%[^0-9]%', SUBSTRING(content, PATINDEX('%CTid%', content) + 5, 12)) - 1) AS CTid       
FROM ARTICLES
WHERE content LIKE '%CTid%'
于 2012-11-02T15:31:09.103 回答
1

这个查询怎么样,在 ms sql server 中工作:

SELECT ID, SUBSTRING(CTid, 0, PATINDEX('%''%', CTid))
FROM(
    SELECT ID, SUBSTRING(content, PATINDEX('%CTid%', content)+5, 12)+'''' AS CTid
    FROM ARTICLES
    WHERE content LIKE '%CTid%'
)X
于 2012-11-02T12:36:22.343 回答
0

SELECT PARSENAME(REPLACE(PARSENAME(REPLACE(yourSQLString, "=", "."), 2),"'", "."),1)

这要求yourSQLString在=之前至少 1 位开始,并在'之后完成至少 1 位

于 2012-11-02T12:31:38.460 回答