寻找在SQL Server(2008)中执行以下字符串操作的好方法:
给定如下字符串(URL):
/path/page.aspx?variable=value
我需要提取“page.aspx”。因此,规则是在正斜杠的最后一个实例(“/”)和问号的第一个实例(“?”)之间获取文本。
重要的是要注意字符串中可能有零个或多个正斜杠和零个或多个问号。所以以下是有效的输入:
/page.aspx?variable=value
page.aspx?variable=value
/path/page.aspx
page.aspx
答案 0 :(得分:3)
这应该处理所有情况,包括缺失斜线或问号:
DECLARE @TestData TABLE
(
URL VARCHAR(500)
)
INSERT INTO @TestData(URL) VALUES ('/path/page.aspx?variable=value')
INSERT INTO @TestData(URL) VALUES ('/page.aspx?variable=value')
INSERT INTO @TestData(URL) VALUES ('page.aspx?variable=value')
INSERT INTO @TestData(URL) VALUES ('/path/page.aspx')
INSERT INTO @TestData(URL) VALUES ('page.aspx')
SELECT
URL,
SUBSTRING(URL,
ISNULL(2 + LEN(URL) - NULLIF(CHARINDEX('/', REVERSE(URL)), 0), 0),
CASE CHARINDEX('?', URL) WHEN 0 THEN LEN(URL) + 1 ELSE CHARINDEX('?', URL) END -
ISNULL(2 + LEN(URL) - NULLIF(CHARINDEX('/', REVERSE(URL)), 0), 0)) AS Page
FROM
@TestData
答案 1 :(得分:0)
SELECT SUBSTRING(url,
LEN - CHARINDEX(REVERSE(url), '/') - 1,
CHARINDEX(url, '?') - (LEN - CHARINDEX(REVERSE(url), '/'))
)
这可能会起作用(或者可能会有一些细微的变化,我没有测试过它)。
答案 2 :(得分:0)
我知道这是旧的,但这里是一个链接到Sql Server的优秀文本操作功能。
http://bradsruminations.blogspot.com/2010/01/handy-string-functions.html
你想要STREXTRACT()
函数。