• ベストアンサー

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

  • MySQL関数max()を条件にSELECTできませんか?

    MySQL5.0を使っています。 次のようなテーブル(items)があるとします。 name(varchar)|number(int) --------------------------- itemA | 5 itemB | 2 itemC | 3 ここからnumberの最大値を持つnameを抽出したいのです。 SELECT max(number) FROM items とすると当然「5」が返ってきますが、このmax(number)を条件にしてitemを抽出することはできないのでしょうか? よろしくお願い申し上げます。

    • ベストアンサー
    • MySQL
  • phpでmysqlを使ってデータベース内の最大値の取得

    PHPでMYSQL内テーブル(hogehoge)の「no」フィールドの最大値を取得をしたいのですが、ほしい結果が得られません。 【PHP】 -------------------------------------------------------------- $my_Max = "select max(no) from hogehoge"; $kekka_max = mysql_query($my_Max); -------------------------------------------------------------- no→今回最大値を取得したい項目(int) 【結果】 これをechoで出力すると、 ----------------------------- Resource id #4 ----------------------------- となってしまいます。 「no」の中の最大値を取得したいのですが、どうしたらよいでしょうか? 【環境】 WindowsXP mysql:5.0.51 php:5.2.5

    • ベストアンサー
    • PHP
  • MySQLでvarchar型のデータの最大値を取得する方法

    お世話になります。 どなたかご回答&アドバイスをよろしくお願い致します。 MySQLで、以下のように登録されているデータがあるとします。 ID(varchar) | name(varchar) 0000001 | ああああ 0000002 | いいいい 0000004 | ううううう それで、登録されているIDの最大値+1を取得したいのです。 IDのカラムのデータ型がIntならmaxで取得できると思うのですが、データ型がvarcharなので…。 レコードの数+1というのは、IDが必ずしも1から飛びがなく登録されているとは限らないので、 その方法は危ないのでできません。 上の例だと、「0000005」を取得したいです。 どうぞご教授お願い致します。

    • ベストアンサー
    • PHP
  • mysql 最大値 取得 

    mysqlのデータベースから、列の最大値を取り出したいのですが、 以下のように書いているのですが、取得される値が1しか返ってこないです。 間違っているところはあるでしょうか? perlで書いています。 my $dbh = DBI->connect("DBI:mysql:host=${db_host};database=${db_name}", $db_user, $db_pass); my $sth = $dbh->prepare("SELECT MAX(列名) FROM テーブル名"); my $rv = $sth->execute(); print "$rv";

    • ベストアンサー
    • MySQL
  • DBでAUTO_INCREMENTのフィールドの最新の数値を知るには

    PHP+MySQLで開発しています。 自らがDBテーブルに書き込んだレコードの、AUTO_INCREMENT指定してある項目に設定された数値を取得したいのですが、どのようにすればいいのでしょうか。 DB指定 CREATE TABLE test( no INT NOT NULL AUTO_INCREMENT, comment TEXT, PRIMARY KEY(no) ); PHP書き込み $sql = "INSERT INTO test(comment)VALUES('いろは')"; $results = mysql_query($sql,$dbid); このとき、テーブルtestのフィールドnoに設定された数値を知るために、 今はわざわざSQL select MAX(no) from test を発行しています。 これですと、確実性に欠けますし、冗長な気がします。 他に何か効率的な方法があるような気がしますので、 質問いたしました。 よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • MySQLのvarcharについて

    今までPostgreSQLを利用していたのですが、MySQLもテストで一回使ってみよと思い触ってみたところ・・・ varchar(20)のカラムに、文字列型で「4571170731101」という値を登録するとDB上では「2147483647」となってしまいます。 int型?とかに解釈されてるんでしょうか。意味がわかりません。 どなたか助けてください。

    • ベストアンサー
    • MySQL
  • PHPでMySQLに登録されているデータのMAXと他のフィールドからデータの取得

    PHPでMySQLの最新のデータを取得し、そのデータのデータ番号を取得しようとしています。 テーブルは ID(INT型、AUTO_INCREMINT) | name(VARCHAR型) | t_touroku(DATATIME型) 1 | test1 | 2005-12-1 12:11:10 2 | TEST2 | 2005-12-2 12:56:10 となっています。 ここから最新のデータt_tourokuを検索しそのデータのIDを取得したいのですが、どうにもうまいことできません。 この場合ですと、IDの2を取りたいんです・・・。 MAXを使えばいけると思ったのですが、最新のデータしか取得できずIDを取得できませんでした・・・。 どうか、お知恵を貸して下さい。 よろしくお願いします。 バージョンは PHP 4.3.10 MySQL 3.23.58 です。

    • ベストアンサー
    • PHP
  • PEAR::DBで取得したデータで処理を分岐したい

    DB関連が苦手な上、動作がうまくいかず、アドバイスをいただければと存じます。現在PHP4、MYSQL4.1.20を使用しております。 行いたい処理は、 PEAR::DBで実行したクエリ SELECT MAX(id) FROM table WHERE `name` = '$test'; 等で、whereで一致する行を絞込み、そのうちの最大値のIDを取得 (クエリの動作は、MYSQL単体で行った場合問題なしで、idの値を取得) その後MAX()で取得した1つIDを、$resultに代入したいのですが、どの様に行えばよいのかわかりません。 今までfetchRow()で事足りていたことで、他の関数がわかりません>< $result=$DB->getOne("SELECT MAX(id) FROM table WHERE `name` = '$test';"); といった感じで取得するのが良いのかも知れませんが、うまく取得できずに詰まっておりますorz 解決法、アイデア等ございましたら、お伺いできればと存じます。 上記ソースは、質問させていただく上で、新規に書いたソースですので、カラム名、変数は仮のものです。不明な情報等ございましたら、捕捉させていただきたいと存じます。

    • 締切済み
    • PHP
  • MySQLのテーブル設計で迷っています(桁数)

    MySQLのテーブル設計で迷っています。 クリエイト文のカッコの中は桁数を表しているのでしょうか?それともバイト数でしょうか?桁数であれば、それぞれの型で何桁まで設定できますでしょうか? int型のnoを18桁に変更したいのですが、調べているうちに迷ってしまいました。 型 バイト 最小値 最大値 TINYINT 1 -128 127 SMALLINT 2 -32768 32767 MEDIUMINT 3 -8388608 8388607 INT 4 -2147483648 2147483647 BIGINT 8 -9223372036854775808 9223372036854775807 CREATE TABLE `user` ( `no` int(8) unsigned NOT NULL auto_increment, `id` varchar(24) NOT NULL default '', `email` varchar(255) NOT NULL default '', `reg_date` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`no`) ) TYPE=MyISAM;

    • ベストアンサー
    • MySQL
  • MYSQL バイナリーデータに変換して取得

    MYSQLでSELECTして以下のテーブルのCODEカラムからバイナリーデータに変換してデータを取得したいのですが、どうしたら良いでしょうか? SELECT CODE FROM TABLE_NEME WHERE ID='XXX' <テーブルデータ> CODE(varchar型) 011A00046D0ADC4B

    • ベストアンサー
    • MySQL