• ベストアンサー

DB: MySQL バージョン:5.0.45

DB: MySQL バージョン:5.0.45 条件: NOのデータ型は、Varchar NOは、1から11まで存在しているとします。 1)Select MAX(NO+1) は、12が取得されます。 2)Select MAX(NO)+1 は、10が取得されます。 上記のような1)、2)のような違いがでる理由が知りたいです。 1)は、MySQLの仕様?で自動でint型に変換されているため、最大値11を取得し、+1をしているのでしょうか? よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>そこまではわかる (1)はMAX(NO+1)は、NO+1したものすなわち2,3,4,・・・,11,12の最大値だから12 (2)はNOの文字列順列1,10,11,2,3,・・・・7,8,9の最大値9に1をたすから10 すなわち(1)は文字列を数値にキャストしてから最大値をとり、 (2)は文字列で最大値をとってから数値にキャストすることによる違いです。

sadoru
質問者

お礼

理解できました。 丁寧に教えて下さいましてありがとうございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

VARCHARのMAXは前方から評価されるので 9>8>7>・・・>2>11>10>1 ですね なので9+1は10です。 素朴な疑問としては理解できますが、実作業においては、キャスト処理を アバウトにすることはないので、そんな差を気にする必要はありません。

sadoru
質問者

お礼

ありがとうございます。 そこまではわかるのですが、1)と2)の違いがでる理由をどうしても理解しなければいけない理由があります。 教えて頂けますでしょうか?

関連するQ&A