2016-04-23 11 views
1

文字列の最後の文字に基づいて値を選択しようとしているMySQL select文を書き込もうとしています。問題は...これらの値は文字列の最後に二重の文字があり、結果を取得するときにそれらを区別することができません。私は上記の#2を返すようにしたいとき、私は現在、両方の値を返しますを使用していますMySQLの文字列の最後にダブル文字を選択する

1. Mens 3's AA 
2. Mens 3's A 

クエリ

は、例えば...私は、テーブルに以下の2つの値を持っています。私は、文字列の末尾に重複した文字を含む値を持っているとき、私は本当に1を選択するための最善のアプローチを理解する必要が

SELECT divisions.div_id, divisions.div_lname 
FROM divisions 
WHERE LEFT(divisions.div_lname,1) = "M" 
AND divisions.div_lname LIKE '%3%' 
AND RIGHT(divisions.div_lname,1) = 'A' 
ORDER BY divisions.div_nop, divisions.div_order 

ではなく、他:ここではクエリです。動作する正規表現のアプローチはありますか?

+1

は、常に最後の2文字を確認します。スペースA ...対AA ...または、より良いことに、最後のスペースを見つけて、比較のためにすべてのものを取ってください。そして最高です...データを標準化してください...そして、この問題はなくなります。 – xQbert

+2

右(divisions.div_lname、2)= 'A'? – RST

+0

'right(_、)'は長さnの接尾辞を抽出するので、 'AND right(divisions.div_lname、2)<> 'AA'または' AND right(divisions.div_lname、2 )<> 'A' 'をあなたの不要なパターンを除外するか望むサフィックスを確認するかによって決めることができます。 – collapsar

答えて

1

このようなSUBSTRING_INDEX()を使用してみてください、それは...それが「AA」を持つ行を返さないspace..so後の最後のチャンクを返すだけ「A」

SELECT divisions.div_id, divisions.div_lname 
FROM divisions 
WHERE LEFT(divisions.div_lname,1) = "M" 
AND divisions.div_lname LIKE '%3%' 
AND SUBSTRING_INDEX(divisions.div_lname,' ',-1) = 'A' 
ORDER BY divisions.div_nop, divisions.div_order 
で行を戻します
+0

私のさまざまなユースケースやデータセットに対してテストを行った結果、Tinのソリューションが私の質問を解決したことがわかりました。私はSUBSTRING関数を使用しておもしろかったが、SUBSTRING_INDEXバリアントは認識していませんでした。私の問題を解決しただけでなく、そのプロセスの新しい機能について学びました。 しかし、REGEXソリューションに関するWiktorの2番目のコメントも有効です。 もう一度...洞察力と方向性に感謝します! – MIrlynn

関連する問題