• ベストアンサー

phpMyAdminでSQLのコマンドについて

SELECT * FROM Orders WHERE data >= '25' dataの部分で値が25以上の情報を出してもらいたいのに、出てくるのが25以上もあるし、下回るのも平気で出てくるので、どうやって検索すればわからないです。 dataの部分のTYPEがVARCHARになってるのが問題のような気がするのですが、DOUBLEに変えようと思ってもできませんでした。 何か対策がないでしょうか? 回答よろしくおねがいします!

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5061/13226)
回答No.1

SELECT * FROM Orders WHERE cast(data as unsigned) >= 25; って感じでしょうか。 文字列のままでは大小比較は出来ませんので型を変えて処理しましょう。 また、文字列型のカラムで値が入っているカラムは数値型に定義変更が出来なかったと思いますので、別途数値型のカラムを用意してUPDATE文で新しいカラムにキャストしながら値を入れ、古いカラムを削除するというやり方で型を変えていくしかないでしょう。

soccerrlove
質問者

お礼

Float(20)とかやってみたらなんとかできました!! 回答ありがとうございました!!

soccerrlove
質問者

補足

>SELECT * FROM Orders WHERE cast(data as unsigned) >= 25; これをSQLに流してもできなかったので、新しくカラムを作ろうと思います。 小数第一位までを表してかつマイナスとプラスそれぞれ100までいくために、double(100)?? 今調べ中なのですが、型の決定と大きさをどうするかで止まってます!

関連するQ&A

  • 1つのSQLにしたいです

    1つのSQLにしたいです 以下のSQLを1つにしたいです。 select a, b, c, '1' event_type from sample where type = '1' select a, b, c, '2' event_type from sample where type = '2' select a, b, c, '3' event_type from sample where type = '3' ポイントはselect分に結果によって'1'、'2'、'3'といれたいです。 初心者的質問で申し訳ありません。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 変数の取り扱いについて

    はじめまして。思いっきりSQLSERVERは初心者なんですが宜しくお願いします。 現在SQLSERVER2005です。 ややこしくなるので要点だけ以下まとめています。 変数を利用してレコードを抽出する時なんですが… ALTER PROCEDURE Test @Rank INT BEGIN DECLARE @SELECT AS VARCHAR(100) DECLARE @WHERE AS VARCHAR(100) DECLARE @SQL AS VARCHAR(200) SET @SELECT = 'SELECT * FROM tblA ' SET @WHERE = 'WHERE Rank > ' + @Rank SET @SQL = @SELECT + @WHERE EXEC(@SQL) END 実行すると varchar の値 'WHERE Rank > 'をデータ型 int に変換できませんでした。 となります。 Rank部分が数値なんですが、どのように取扱いすべきなんでしょうか。

  • SQL文の実行速度について

    こんにちは。SQLを勉強しています。 質問をさせてください。 Oracleテーブル(test_table:レコード数はかなりあると考えて構いません) にnumber(int),value(varchar), code(varchar)の3つのフィールドが存在 するとします。 今、codeを指定してvalueを取得したいと考えています。 (1)---------------------------- select value from test_table where code='001'; select value from test_table where code='002'; select value from test_table where code='003'; (2)---------------------------- select code, value from test_table where code='001' or code='002' or code='003' (1)と(2)ではどちらが実行速度が速いのでしょうか? 実際に実行すればわかることですが、そういった環境が ないので、確認できません。宜しくお願い致します。

  • SQLについて

    こんにちは、honiyonです。  良い質問タイトルが思いつきませんでした...(^^;  2つのテーブルがあります。(仮定です)   ・オーナーの情報テーブル(owner)   ・オーナーの車の情報テーブル(car)  この2つのテーブルを利用して「男性の人で、黒い車に乗ってる人の車種名」を検索しようとしました。  これを1つのSQLで   SELECT car.name FROM owner,car WHERE (owner.no=car.ownerno) and (car.color='black') and (owner.sex='MAN');  とか、   SELECT car.name FROM (SELECT * FROM owner WHERE (owner.sex='MAN')) AS O2, (SELECT * FROM car WHERE (car.color='black')) AS C2 WHERE (owner.no=car.ownerno);  とかやってみましたが、涙が出るほど遅いです。  しかし   SELECT * INTO TABLE owner_tmp FROM (SELECT * FROM owner WHERE owner.sex='MAN'); SELECT * INTO TABLE car_tmp FROM (SELECT * FROM car WHERE car.color='black'); SELECT car_tmp.name FROM (owner_tmp.no=car_tmp.ownerno);  とすると超高速です。  なんとかテンポラリを作らず、出来れば1つのSQL文で高速に冒頭の処理を行いたいのですが、良い方法はないでしょうか。 是非お知恵を貸してください。  宜しくお願いします(.. #データベースはPostgreSQL 7.2.3です。

  • SQL・・

    SQL構築で聞かせてください。 テーブル 名前    購入月   購入日 カローラ    4    18 プリウス    5     2 クラウン   12    22 なカンジです・・。 文章で表すと、例えば、 4月16日~5月15日までのデータを取りたいのです。 SELECT * FROM kounyuu WHERE 名前 = プリウス 購入月 = 4 AND 購入日 >= 16 SELECT * FROM kounyuu WHERE 名前 = プリウス 購入月 = 5 AND 購入日 <= 15 この2つの SELECT 文を1つにすることは可能ですか? (名前には、常に同じ値が入ります)

  • StatementクラスのexecuteQueryメソッドを使用したSQLの発行について

    StatementクラスのexecuteQueryメソッドを使用したSQLの発行について教えてください。 JavaでMySQLのデータベースからデータを取得するため、 executeQueryメソッドを使用してSQLの発行を行ったのですが、select文が正常に実行されずに困っています。(where句の条件が引っかからずに困っています。) 【前提】 ・カラム「name」の値に「name(nameという文字)」が入っている状態。 ・INT型、CHAR型で定義されたカラムの値は取得できる ・VARCHAR型で定義された、カラムの値が取得できない 【状況】  VARCHAR型で定義された、カラムの値が取得できない場合というのが、java側で、  stmt.executeQuery("SELECT * from customer where name='name'") というようにSQL文を発行した場合です。  MySQLのコマンドプロンプトからダイレクトに投げた場合や、  またDBViewerを使用した場合は、Where句の「name='name'」で引っかかったデータが正常に返ってくるのですが、  Javaから発行した場合のみ「VARCHAR型で定義されているカラムの値が取れない」という状況なのです。  (考えられることとしては、SQL発行時「SELECT * from customer where name='name'」 の 「'name'」が、別の何かに変わっているのかな?(文字コードなどが関係しているのか?)など考えているのですが、解決できず困っております。)   一体どこに問題があるのでしょうか?   (CHAR型、INT型のデータは正常にJava側で読めるのに、VARCHAR型の値をwhere句にした場合に限って、正常にデータ抽出できない、という点が腑に落ちないのですが・・・ SQLエラーを吐く訳ではなく、抽出条件が成立していない形なのです)   【実行環境】 ・Windows XP Pro ・eclipse3.4(all in one eclipse) ・Java1.6 ・TomCat6.0 ・MySQL5.0 (文字コード:UTF-8)

    • ベストアンサー
    • Java
  • SQL文で質問があります。

    商品マスタがあり、データは下記の感じで登録されています。  コード | 商品名  | 商品カナ | 分類コード ・・・ ---------------------------------------------------------  0001  | マウス  | マウス  | 01     ・・・  0002  | キーボード| キーボード| 01     ・・・  0003  | モニター | モニター | 01     ・・・          ・          ・          ・ SQL文で質問があります。 下記のSQLでは取得できるんですが・・・ SELECT * FROM M_SHOHIN WHERE code = ANY('{0001,0002,0003}'); 下記のSQLを実行したらエラーが出力されました。 SELECT * FROM M_SHOHIN WHERE code = ANY(  SELECT ARRAY_AGG(code) AS code FROM M_SHOHIN WHERE class_code = '01' ); ERROR: operator does not exist: character varying = character varying[] HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. なので下記のようにCASTをするようにして実行したらエラーは出力されなくなりましたがデータの取得ができませんでした。 SELECT * FROM M_SHOHIN WHERE code = ANY(  SELECT CAST(ARRAY_AGG(code) AS VARCHAR) AS code  FROM M_SHOHIN WHERE class_code = '01' ); どのようにすれば取得できますでしょうか。 説明が下手で申し訳ありませんがアドバイスいただけませんでしょうか。 データベースはPostgreSQL 8.4.9です。 宜しくお願いします。

  • SQLで'ABC'をDBの'AB'にHIT

    sqlite3をVC++2013で扱っています。 もしかしたら、単純な方法があるのかもしれないので質問させてください。 DBに渡す文字が'ABC'でDB内のデータ'AB'にHITさせたいと思っています。 現状思いつく方法は select * from テーブル where キー like 'A%'; select * from テーブル where キー like 'AB%'; select * from テーブル where キー like 'ABC%'; と渡す文字を一文字ずつ増やして検索して row数が0以上の一番小さい数のデータを取得するという方法しか思いつかないのですが。 何か良い方法はありますでしょうか?

  • 【Transact-sql】 where条件、inのパタメータを変数に持たせる方法

    inの中の値を変数に持たせ、実行したいのですが方法がわかりません。 以下に、問題となっているsqlを記載しました。 aテーブルのIDはsmallint型で、varchar型等への型変更不可とします。 cast(ID as varchar(100)) in (@ID) 等も試してみたのですが、 '1,2,3'をin内の1データとみなしてしまっているようで、正しい結果を 返してくれませんでした。 declare @ID varchar(100) set @ID = '1,2,3' SELECT * FROM a WHERE ID in (@ID)

  • MySQL5.1+phpMyAdmin2.10.1でWHERE検索できません

    タイトルの環境で以下のようなテーブル(movie)をつくっています。 title(varchar) | category(varchar) ------------------------------------- starwars | fiction sound of music | musical $sql = "SELECT * FROM movie WHERE category='musical';"; 上記のような単純なクエリーなのですが、ヒットしません。 phpMyAdminの「検索」でも結果は「返り値が空でした(行数0) 」と表示されます。 使用中のMySQLのバージョンは正確には5.1.17-betaです。 途方に暮れております。よろしくお願いいたします。

    • ベストアンサー
    • MySQL