mysql:9747
From: JSD藤澤知弥 <JSD藤澤知弥 <fujisawa-tomoya@xxxxxxxxxx>>
Date: Fri, 2 Jul 2004 13:46:29 +0900
Subject: [mysql 09747] Re: 文字列を数値に変換
ふじさわです。
回答レスではないです。。。
Oracle8i でも、比較される列に関数を使用すると、Indexが使用
されなくなってましたので、比較対象となる値の方に関数を使い、
変換するようにしました。
例えば、下記で a が文字列の時、
where a = 1000
だと、a に張られた索引が使用されないので、
where a = lpad(to_char(1000), 7, '0')
という比較の仕方をしました。
同様のことをMySQLではできるのか?どうやってやるのか?は私も
疑問です。
ちなみに、
SQLServerだと、CAST()という引数を1つ必要とする関数があって、
引数が数値だと文字列に変換し、引数が文字列だと数値に変更す
るようです。
## 横やりみたいになってすみません。
> yoshiです。
>
> いっちゃんさん、おぎのさん、松枝さんレスをいただきありがとうございます。
> 返事が遅くなってしまい申し訳ありません。
>
> > 文字列を数値化したものと文字列リテラルを比較する事に別段の事由があるの
> >でしょうか?
> ふつうはないと思うのですが、今回は文字列'0001234'と数値の'1234'とを比較
> して同じとみなしてマッチングさせたかったためこのような質問となりました。
>
> > WHERE a=1000
> >で,暗黙にaが数値型に変換され評価されます。
> ''をはずしてやってみましたが、うまくいったようです。
> ありがとうございました。
> 但し、関連して他の問題が発生してしまいました。
> 実はaはプライマリキーだったのですが、数値型に変換されるときに
> たぶんインデックスが使われなくなってしまうためだと推測する
> のですが、いままでの約40倍ほど処理が遅くなってしまい、
> 愕然としてしまいました。
> (但しこれはoracleでもきっと同じ現象なのだとは思いますが)
>
> やりたいことは上記のようなことなのですが、速度を犠牲にしない
> 何かよい方法はないものでしょうか?
>
> >
> >表題の件、oracleでは次のようなsqlを、
> >SELECT a FROM table WHERE TO_NUMBER(a) = '1000';
> >
> >mysqlにはTO_NUMBERのような関数がないようなのですが、
> >どのようにすれば数値として比較が可能なのでしょうか?
> >
> >
>
> ----
>
@ 9721 2004-06-30 22:23 ["松本 諭" <auaxs529] userのログイン(?) 9722 2004-07-01 08:38 ┣[yoshi <yosihisa@xxxx] 9737 2004-07-01 21:48 ┃┗["松本 諭" <auaxs529] 9723 2004-07-01 08:39 ┣[ML account <ml@xxxxx] 9738 2004-07-01 23:09 ┃┗["松本 諭" <auaxs529] 9739 2004-07-02 01:11 ┃ ┗[ML account <ml@xxxxx] 9724 2004-07-01 09:56 ┗[yoshi <yosihisa@xxxx] 文字列を数値に変換 9725 2004-07-01 10:14 ┣[いっちゃん <icchan@x] 9726 2004-07-01 10:24 ┣[OGINO Tomonori <ogin] 9727 2004-07-01 10:40 ┣[ML account <ml@xxxxx] 9746 2004-07-02 13:17 ┗[yoshi <yosihisa@xxxx] -> 9747 2004-07-02 13:46 ┣[JSD藤澤知弥 <fuji] 9748 2004-07-02 14:00 ┗["片寄白王" <katayose] 9749 2004-07-02 14:22 ┗[yoshi <yosihisa@xxxx] 9750 2004-07-02 14:57 ┣["片寄白王" <katayose] 9751 2004-07-02 15:55 ┃┗[yoshi <yosihisa@xxxx] 9753 2004-07-02 17:11 ┃ ┗["片寄白王" <katayose] 9752 2004-07-02 16:00 ┣[Hirofumi Fujiwara <f] 9754 2004-07-02 18:13 ┣[ML account <ml@xxxxx] 9755 2004-07-02 20:21 ┗[OGINO Tomonori <ogin]