2012-03-09 5 views
6

ここには3つのフィールドを持つサンプルテーブルがあります。WHERE句にsubstrを指定したSELECT文

TableA 

    FieldA  FieldB  FieldC 
    ====================================== 
    123XYZ456  XYZ   John 
    124NNN333  NNN   Jenny 
    232XPT124  XPT   Jade 
    456XXX345  XXX   James 

FieldAは、私は、このテーブルを設計していなかったし、いくつかのアプリケーションはすでにそれを使用している9の固定長を持っています。

FieldBFieldCFieldAとの条件で選択します。私は私の望ましい結果を達成することはできません

SELECT FieldB, 
     FieldC 
FROM TableA 
WHERE FieldA LIKE Concat(@paramA, '%', @paramB) 

:このSQL文を使用して

。明らかにそれは12%と一致し、それは私が欲しいものではありませんので、

FieldA  FieldB  FieldC 
    ====================================== 
    123XXX456  XXX   John 
    124XXX333  XXX   Jenny 

:私は12のparamA値と''のparamB値を検索しようとすると、私は2結果を得ます。 paramsが文字列の正しいインデックスと一致する必要があります。

私がparamA = '12'paramB = ''を検索した場合、結果は得られません。フィールド(FieldBFieldC)を取得するには、paramA = '123'paramB = '456'という正しい値が必要です。したがって、XYZJohnが返されます。私がJamesを返そうとすると、私は与えなければならないparamA = '456'paramB = '345'

私はこれに対して正しいSQLステートメントを作成することができますか?何か案が?ありがとう。

+0

ウルは、基本的には右の最初の3と最後の3文字アプト懸念しますか? – Teja

+0

まさに!それが私が望んだことです。 –

答えて

14

使用LEFT()RIGHT()

SELECT FieldB, FieldC 
FROM TableA 
WHERE LEFT(FieldA,3) = @paramA 
     AND RIGHT(FieldA,3) = @paramB; 
+0

アダムに感謝します。私は答えを受け入れるために3分後に戻ってきます。 :) –

+0

大歓迎です。私たちが助けてくれてうれしいです。 – bernie

+0

+1の解決策ですが、残りの質問は*なぜ*動的なLIKEの仕事ではありませんか? –

3
SELECT Field2,Field3 
FROM TABLE 
WHERE SUBSTR(Field1,1,3)='123' AND SUBSTR(Field1,7,3)='456' 
1

あなたがさえparamBがあなたの入力検証で空白になることができるようにしている理由、それは明らかにされていないが、あなたは、あなたが記載されている正確な動作を得るために、ちょうどその場合のためにチェックすることができ、すなわち:そうのよう

WHERE @paramA!='' AND @paramB!='' AND FieldA LIKE Concat(@paramA, '%', @paramB) 
0

:例えば分類表:アメリカなどでアメリカの住宅、土地..

mysql_query("select classification from properties where LEFT(classification, 5) = 'Homes'"); 

結果:ホームズ