如何在/
和.html
?
http://www.site.com/prod/bunch-of-seo-text-of-different-length/12345687.html
http://www.site.com/prod/bunch-of-seo-text-of-different-length/12345688.html
http://www.site.com/prod/bunch-of-seo-text-of-different-length/12345688.html
我试过这个,但我不知道语法
SUBSTRING(link FROM '%/%' FOR '%.html%')
答案 0 :(得分:2)
问题是:
如何在/和.html之间提取数值?
正确答案是:
SELECT substring(link, '/(\d+)\.html')
\d
.. [[:digit:]]
的班级简写,相当于[0-9]
+
..前述原子中的一个或多个
()
..括号捕获比赛
\.
.. dot必须被转义才能失去其特殊含义
测试:
WITH x(link) AS (
VALUES
('http://www.site.com/prod/bunch-of-text-of-different-length/12345687.html')
,('http://www.site.com/prod/bunch-of-text/12345688.html')
,('http://www.site2.com/prod/123/text-of-di456fferent-89-len/12345688.html')
)
SELECT substring(link, '/(\d+)\.html') FROM x;
regexp_matches()
用于捕获多个匹配,并不是一个好的选择。
答案 1 :(得分:1)
我不是postgresql的人,但看起来它有一些内置的正则表达式函数。请参阅PostgreSQL Matching Functions,并找到它描述regexp_matches
功能的部分。 regexp_matches
返回一个数组({})。
SELECT regexp_matches(link, '([0-9]+)\.html$');
将此与unnest
相结合,请参阅PostgreSQL Arrays:
SELECT unnest(SELECT regexp_matches(link, '([0-9]+)\.html$')) as matches;
答案 2 :(得分:0)
此代码段将为您提供任何网址的文件名:
SELECT REVERSE(SUBSTRING(REVERSE(REPLACE('http://www.somewhere.com/folder/page.html', '\', '/')), 1, CHARINDEX('/', REVERSE(REPLACE('http://www.somewhere.com/folder/page.html', '\', '/'))) - 1)) as PageName
输出
page.html中
或者,如果您将url作为nvarchar变量传递:
SELECT REVERSE(SUBSTRING(REVERSE(REPLACE(@Url, '\', '/')), 1, CHARINDEX('/', REVERSE(REPLACE(@Url, '\', '/'))) - 1)) as PageName
答案 3 :(得分:0)
另一种选择是使用子串函数:
select substring(link from '[0-9]+')
from your_table;
这假设网址中只有一个“数字”。