解析URL以查找变长字符串

时间:2016-01-12 15:42:59

标签: sql sql-server string parsing url

我在多个网址中有一个字符串,以两个字符开头,后跟1-6个数字,例如'SO123456'此字符串很少位于URL中的相同位置。字符串后面是.html或空格。

SELECT SUBSTRING(URL,PATINDEX('%SO[0-9]%',URL),8)

FROM Table

WHERE URL LIKE '%SO[0-9]%'

如果字符串短于8个字符,则此代码返回“SO12.htm”。

并非所有的网址都有此字符串,如果是这种情况,那么我仍然需要查询来生成“Null”。

我正在尝试返回字符串的确切长度。有人可以帮我解决这个问题吗?你能找到在子字符串中使用的通配符字符串的长度,以便只返回确切的字符串长度吗?

非常感谢。

3 个答案:

答案 0 :(得分:0)

我认为你应该先检查一下这个专栏的长度。 这是代码

SELECT CASE LEN(URL) -- Check the length of URL column
WHEN > 8 THEN SUBSTRING(URL,PATINDEX('%SO[0-9]%',URL),8)
ELSE -- do your stuff
END as 'example'
FROM Table

答案 1 :(得分:0)

试试这个: 选择patindex('%SO [0-9]&',URL)= 0时的情况,然后选择null else substring(URL,patindex('%SO [0-9]&& #39;,URL),8)

从表

答案 2 :(得分:0)

不太详细,但作为一个让你开始的提示:

patindex = PATINDEX('%SO[0-9]%',URL) -> Index of the start of the pattern
charindex = CHARINDEX('.html', URL, patindex ) -> Index of the first '.html' after the start of the pattern.
patternLen = charindex - patindex

以下内容可能会有效:

SELECT
  CHARINDEX('.html', URL,
    PATINDEX('%SO[0-9]%',URL)
  ) -
  PATINDEX('%SO[0-9]%',URL)
FROM ...
  

并非所有网址都包含此字符串,如果是这样,那么我就是这样   仍然需要查询来生成Null'。

- >外(自)加入:

SELECT
  allUrls.URL,
  CHARINDEX('.html', u.URL, PATINDEX('%SO[0-9]%',u.URL) ) - PATINDEX('%SO[0-9]%', u.URL) -- Same as above
FROM MyTable allUrls
LEFT OUTER JOIN MyTable u
  ON allUrls.URL = u.URL
  AND u.URL LIKE '%SO[0-9]%'