0

テキスト フィールドを持つ 1 列のデータベースがあります。特定の部分文字列を含む新しい列を見つけてマウントする必要があります。私の英語は苦手なので、以下に説明しようと思います。

1 フィールドの例:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. 性的虐待の結果として、性行為の結果として、性犯罪者は XXXX で yyyyyvero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claricatem insitam; est usus legentis in iis qui facit eorum claricatem. Investigationes demonstraverunt letores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus、qui sequitur Mutationem consuetudium lectorum。Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.

yyyyyの後xxxx :に続く の値と、テキスト内の変数の位置を見つけて抽出する必要があります。これまでのところ、私はこれを試しました:

SELECT 
 SUBSTRING_INDEX(
 RIGHT(description, 
 GREATEST(LOCATE('xxxx :', description),
 LOCATE('xxxx :', description))-1), ' ', -1)
FROM wwwww

それがそれを解決する方法かもしれないことは知っていますが、これを正しく機能させることはできません。(私はすでにこれを見てきました:LOCATE と SUBSTRING を使用して MySQL から特定のテキストを返す

PS: "XXXX :" は常に同じです... yyyyy には可変値があります

4

2 に答える 2

2

これを試してください

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(description,'XXXX : ',-1),' ',1) from wwwww

これがsqlFiddleです

うまくいかない理由がわからない場合は、このバリエーションを試してみてください。これがうまくいくかどうかを確認してください

SELECT SUBSTRING_INDEX(RIGHT(post_content,LENGTH(post_content) - (LOCATE('XXXX : ',post_content)+6)),' ',1) as var from wp_posts
于 2014-01-10T20:48:33.050 に答える
0

PHP と正規表現を使用して、テキスト ブロック内の次の最初の単語 (または文字列) を検索するにはxxxx :(場合によっては の前後にスペースがある場合とない場合があります )::

$subject = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit, vel illum dolore eu feugiat nulla facilisis at XXXX : yyyyy vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.";

# Case insensitive match.
$pattern = '/XXXX\s?:\s?(\w+)/i';

# If `XXXX` really has to be all caps, remove the `i` flag, like so:
#$pattern = '/XXXX\s?:\s?(\w+)/';

preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
print_r($matches[1]);

$matched_text = $matches[1][0];
echo $matched_text;

$match_position = $matches[1][1];
echo $match_position;
于 2014-01-11T02:55:48.870 に答える