我在多个网址中有一个字符串,以两个字符开头,后跟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”。
我正在尝试返回字符串的确切长度。有人可以帮我解决这个问题吗?你能找到在子字符串中使用的通配符字符串的长度,以便只返回确切的字符串长度吗?
非常感谢。
答案 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]%'