1

/との間の数値を抽出するにはどうすればよい.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%') 
4

4 に答える 4

2

質問は:

/と.htmlの間の数値を抽出するにはどうすればよいですか?

そして、適切な答えは次のとおりです。

SELECT substring(link, '/(\d+)\.html')

\d[[:digit:]].. [0-9]と同等のクラスの省略形
+..前のアトムの1つ以上
()..括弧は一致をキャプチャし
\.ます..ドットはその特別な意味を失うためにエスケープする必要があります

テスト:

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()複数の一致をキャプチャするためのものであり、これには適していません。

于 2012-07-24T22:42:07.050 に答える
1

私はpostgresqlの人ではありませんが、いくつかの正規表現関数が組み込まれているようです。PostgreSQLマッチング関数を参照し、関数について説明しているセクションを見つけてくださいregexp_matchesregexp_matches配列({})を返します。

SELECT regexp_matches(link, '([0-9]+)\.html$');

これを「 PostgreSQL配列unnest」を参照して組み合わせてください。

SELECT unnest(SELECT regexp_matches(link, '([0-9]+)\.html$')) as matches;
于 2012-07-24T21:29:42.390 に答える
0

このスニペットは、任意のURLのファイル名を提供します。

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
于 2012-07-24T21:28:47.210 に答える
0

別のオプションは、部分文字列関数を使用することです。

select substring(link from '[0-9]+')
from your_table;

これは、URLに1つの「番号」があることを前提としています。

于 2012-07-24T22:00:56.893 に答える