3

MYSql データベースにクエリがあります。テーブルorder_detがあり、テーブルの列remarks_descには次のエントリが含まれています。

テーブル構造:

Table: order_det

Columns: rec_id, remarks_desc

order_det テーブルのサンプル レコード

rec_id      remarks_desc
_________________________________________________________

1           a specific PROGRAMMING problem
2           A software Algorithm
3           software tools commonly USED by programmers
4           Practical, answerable problems that are unique to the programming profession
5           then you’re in the right place to ask your question
6           to see if your QUESTION has been asked BEFORE

私の要件は、すべて大文字で保存されたもう 1 つの単語を含むレコードのみを選択することです。上記の 6 つのレコードから、1,3,6 レコード以下のみを選択したい:

rec_id      remarks_desc
__________________________________________________
1           a specific PROGRAMMING problem (it contains one all uppercase word PROGRAMMING)
3           software tools commonly USED by programmers (it contains one all uppercase word USED)
6           to see if your QUESTION has been asked BEFORE (it contains two all uppercase words QUESTION and BEFORE)

LIKE、REGEXP を使用してこれをアーカイブしようとしましたが、間違った結果が得られました。正しい結果を得るために私を助けてください。

4

2 に答える 2

0

試す:

SELECT rec_id, remarks_desc FROM order_det WHERE remarks_desc REGEXP '(^|[[:blank:]])[[:upper:]][[:upper:]]+([[:blank:]]|$)'

一文字大文字の単語を除外したいと考えています。文字列の先頭にある大文字の単語を除外したい場合は、正規表現を微調整する必要があります。

テーブルの照合順序で大文字と小文字が区別されることを確認してください (_ci ではなく _cs)。

http://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexpの情報を使用しました

ただし、正規表現を使用してデータベースからデータを抽出する必要がある場合は、データベースの設計を改善できるかどうかを検討する価値があります。これは、データベースに優れたパフォーマンスが必要な場合に特に重要です。

于 2012-10-31T11:57:03.067 に答える
0

これは、一連の大文字の単語の量を返す非常に単純なストアド関数です。

短所:

  • 純粋な SQL ではなくストアド関数です。
  • それは使用していますcollate
  • 正規表現を使用しますが、別の内部ループを使用して自由に埋めることができます。
  • すべての単語をカウントしますが、2 に達するとブレークを追加できます。

次のリンク(gist.github.com)で関数を見つけてください。ここでは正しく表示されません。

于 2012-10-31T11:59:32.050 に答える