2017-05-23 5 views
2

私は基本的に任意の非ネストされたSQL文字列を取り、すべて同じ正規表現でカウントを取得するためにSQLに変換することができるようにしたいです。"SELECT whatever FROM"から "SELECT COUNT(*)FROM"に変換する正規表現は何ですか?

それだけではSELECTと1つの間の時間から何かに合わせてカウント(*)で置き換えることができなければならないが、私はまだ私の正規表現をレベルアップする経験値が割り当てられていません。

すなわち

SELECT col1, col2 FROM my_table where..." to "SELECT count(*) FROM my_table where... 

それとも

SELECT * FROM my_table where..." to "SELECT count(*) FROM my_table where... 
+2

あなたはどのようなプログラミング言語を使用しています。文字列の置換は言語によって異なります。 – MotKohn

答えて

3

はなぜ、MySQLで

SELECT COUNT(*) from (<insert original sql here>) as X 
+0

ブーム。それは素晴らしい仕事です。どうもありがとう! –

0

をしないで、あなたが任意のクエリでSQL_CALC_FOUND_ROWS、その後FOUND_ROWS()を使用することができます。だから、:

SELECT FOUND_ROWS() 

これはdocumentationに定義されています。

SELECT SQL_CALC_FOUND_ROWS . . . 
FROM . . . 

は、その後の行数を取得します。

0

正規表現の場合は、hereという単純なものを使用できます。

本来、SELECTFROMの間にあるものをすべてCOUNT(*)に置き換えます。詳細はリンクにも記載されています。

これはあなたの思考に役立ちますが、深くテストされていないことに注意してください。あなた自身でいくつかのテストを実行してください。

はまたなどのPython、JavaScriptの

編集1でコードを生成するためのリンクを使用することができます。リンクは、コードスニペットとして封入したので、動作しませんでした。コードのメタタグを削除しました。

+0

* [ここ] [1] *どこですか? – niksofteng

+0

oops。今すぐリンクが動作します。 – Khanna111

0

私はいつもあなたが何の単純または全てのいずれかのオプションを持っていないときregexを使用すべきであると考えています。あなたの場合、正規表現の代わりに単純なSQLロジックでこれを行うことができます。あなたはそのままMySQLの手順または任意に元のクエリを渡し、これを行うことができます:

set @inputQuery = 'SELECT col1, col2 FROM my_table where id = 1'; -- you will pass this 

set @startIndex = locate('select', @inputQuery) + char_length(rtrim('select')); 
set @endIndex = locate('where', @inputQuery); 
set @subString = substring(@inputQuery, @startIndex, @endIndex - @startIndex); 
set @finalQuery = replace(@inputQuery, @subString, ' count(*) '); 

select @finalQuery; 

出力:

SELECT count(*) where id = 1 
関連する問題