#601 SQL文からWHERE句部分だけを取り出すには? VBA

SQL文の中から、WHERE句部分だけを取り出すプログラム例です。

次の例では、まずテスト用に変数strSQLにSQL文を代入し、そこからWHERE句の始まる文字の位置を取得、さらに後続にORDER BY句がある場合も考慮してその位置を取得、最後に変数strSQLからWHERE句部分だけをMid$関数で切り出しています。この場合、結果的にイミディエイトウィンドウには『顧客コード>1000』と出力されます。

なお、「intPos1 + 7」の「7」は、intPos1を取得する際に使った" WHERE "(前後に半角スペース含む)という検索文字の長さを示しています。またこれはあくまでもシンプルなSQLの例であって、SQL文内に「WHEREとORDER BYの両方が含まれているとき」「WHEREだけ含まれているとき」「WHEREが含まれていないとき」の条件分岐は記述されていますが、もし「GROUP BY句」など他のSQL文の要素が含まれる可能性がある場合には、そのバリエーションに応じてもう少しいろいろな文字列処理を追加する必要があると思います。

Dim strSQL As String
Dim strWhere As String
Dim intPos1 As Integer
Dim intPos2 As Integer

'テスト用のSQL文を設定
strSQL = "SELECT * FROM tbl売上実績 WHERE 顧客コード>1000 ORDER BY 売上日付"

'WHERE句の文字位置を取得
intPos1 = InStr(strSQL, " WHERE ")
'ORDER BY句の文字位置を取得
intPos2 = InStr(strSQL, " ORDER BY ")

If intPos1 > 0 And intPos2 > 0 Then
  'WHEREとORDER BYの両方が含まれているとき
  strWhere = Mid$(strSQL, intPos1 + 7, intPos2 - intPos1 - 7)
ElseIf intPos1 > 0 Then
  'WHEREだけ含まれているとき
  strWhere = Mid$(strSQL, intPos1 + 7)
Else
  'WHEREが含まれていないとき
  strWhere = ""
End If

Debug.Print strWhere

| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved