mysql:6844
From: Shinya Kawaji <Shinya Kawaji <kawaji@xxxxxxxxxx>>
Date: Sun, 12 Jan 2003 18:20:53 +0900
Subject: [mysql 06844] Re: 数字以外の文字を含む範囲検索
かわじ、です。 > DD9900 DD9950 BBBB > > といったような商品番号の場合、商品検索で「DD9931」と入力した場合、 > やはり「BBBB」を拾わないといけません。 > > 数字だけ範囲検索するように、 > > SELECT hin_name FROM tbl_hin WHERE hin_fr >= DD9931 AND hin_to <= DD9931 > > とした場合、意図した検索結果にならない場合があるようです。 その意図した結果にならない場合がどのような場合か、お調べになりましたか? その「例」が分からないので、以下適当な答えですが・・・ とりあえず、上記の WHERE 節の場合、BETWEEN を使うことも出来ます。 (以下の例では、比較関数の結果が真なので 1 を返しています) mysql> select 'DD9931' between 'DD9900' and 'DD9950'; +----------------------------------------+ | 'DD9931' between 'DD9900' and 'DD9950' | +----------------------------------------+ | 1 | +----------------------------------------+ 1 row in set (0.00 sec) マニュアルの 6.3.1.2 にあるように、同じ位同士の比較では、 「数字 < 英字(大文字小文字を問わない)」で比較されます。 http://www.mysql.gr.jp/jpdoc/4.0/manual.ja_Reference.html#Comparison_Operators (以下の例で、a は 9 と B の間にあることに注意) mysql> select 'DDa931' between 'DD9900' and 'DDB950'; +----------------------------------------+ | 'DDa931' between 'DD9900' and 'DDB950' | +----------------------------------------+ | 1 | +----------------------------------------+ 1 row in set (0.00 sec) なのでもし、同じ位に文字と数字の両方表れる場合があるとして、(上の場合と は逆に)文字よりも数字の方が「大きい」ということにしたいのであれば、 REPLACE などを駆使して、正しく比較できるように対象となる文字列を 変換する必要があります。 比較する文字列の長さが違う場合は以下の通り。 (以下の例で、DD9950 ではなく、DD995 であることに注意) mysql> select 'DD9931' between 'DD9900' and 'DD995'; +---------------------------------------+ | 'DD9931' between 'DD9900' and 'DD995' | +---------------------------------------+ | 1 | +---------------------------------------+ 1 row in set (0.00 sec) 文字列が短くても、(上から順に見て)同じ位の文字が大きい方が「より大きい」 ことになります。 なので、もしこういった「文字列の長さの違いで、意図した順番と前後する」の でしたら、 LPAD や RPAD などを使って、全て同じ文字の長さにして 比較してはいかがでしょうか? 思いついた点は以上です。的外れかもしれませんが。 -- Shinya Kawaji
6842 2003-01-12 17:30 [Koji Yamamoto <yamam] 数字以外の文字を含む範囲検索 6843 2003-01-12 18:00 ┣["3web" <dvh52252@xxx] 6845 2003-01-12 18:31 ┃┗[Koji Yamamoto <yamam] 6846 2003-01-12 19:37 ┃ ┣["3web" <dvh52252@xxx] 6852 2003-01-13 14:23 ┃ ┗[Hiromi Kurita <youji] -> 6844 2003-01-12 18:20 ┣[Shinya Kawaji <kawaj] 6853 2003-01-13 23:35 ┃┗[Koji Yamamoto <yamam] 6855 2003-01-14 02:03 ┃ ┗[とみたまさひろ <tomm] 6851 2003-01-13 13:31 ┗["3web" <dvh52252@xxx] 6854 2003-01-13 23:49 ┗[Koji Yamamoto <yamam]