誕生日にもらった意外なもの

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をしているのでしょうか?

よろしくお願い致します。

A 回答 (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)は文字列で最大値をとってから数値にキャストすることによる違いです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/06/16 10:04

VARCHARのMAXは前方から評価されるので


9>8>7>・・・>2>11>10>1
ですね
なので9+1は10です。

素朴な疑問としては理解できますが、実作業においては、キャスト処理を
アバウトにすることはないので、そんな差を気にする必要はありません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/06/15 15:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す


おすすめ情報