• ベストアンサー

text型のデータをintegerにキャストしたいのですが…

chie65536の回答

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

>select * from テーブル名 >where 年月 < '200101' and ...(略)... >上記の書き方は正しいのでしょうか… 文字列同士の比較をしているので「構文的には」正しい書き方です。 但し「構文的には正しい書き方」であっても、それが期待した結果を返すとは限りません。 今回のように「常に6桁のデータが入力されている事が保証されている」場合は問題はありませんが、6桁に満たないデータがあった場合は、期待した結果と違う結果になります。 例えば、4桁のデータを6桁のデータと比較してみましょう。数値扱いで 9999 < 200001 は真ですが、文字扱いだと '9999' < '200001' は偽になります。 この問題を回避するには、9999 を '009999' と入力させ、データが常に6桁になるようにする必要があります。 今回のケースでは「常に6桁同士の比較演算」との保証があるので select * from テーブル名 where 年月 < '200101' and ...(略)... で期待した結果になり問題はありませんが、入力されたデータの桁数が不定の場合は注意が必要です。

関連するQ&A

  • SQL分のWHERE句について

    SQLのWHERE句について ================================== ABC :入力値(2又は5バイトの可変) T.テーブル.フィールド:ABCが格納されているテーブル(格納すると同時に5桁になります。) 例:01(入力値)⇒01000(格納値) ================================== 参照時のWHERE句の作成の仕方を教えてください。 ※検索値が2桁の場合は、格納値5桁の前方2桁一致でHITさせます。  また5桁の場合は、格納値5桁の全一致です。 今考えているのでは、 IF ABC <> "" THEN IF LenB(ABC) = 2 THEN SQL_WHERE = SQL_WHERE & "AND (LEFT(T.テーブル.フィールド,2) = '" & ABC & "' )" ELSEIF SQL_WHERE = SQL_WHERE & "AND (T.テーブル.フィールド = '" & ABC & "')" END IF END IF です。 宜しくお願いします

  • SELECT文で指定桁数分抽出する方法?

    SQL初心者ではじめて質問させていただきます。 SELECT文でテーブルの1つのカラムから上3桁と下2桁を抽出し、別なテーブルのカラムの上5桁をWhere句に条件を入れて検索はできますか? どなかたお分かりでしたら教えてください。 よろしくお願いします。

  • ストアド cast演算子 char型→int型に変換

    SQLServerのストアドで困ってます。 int型の数値(suuti1)とchar型の数値(suuti2)を計算させたくて、 以下のようなSQL文を書いたのですが、実行できなくて困ってます。 ※エラーはでません。 kekka = suuti1 + CAST(suuti2 AS INTEGER) どうすれば計算できるでしょうか? 教えてください。

  • phpとmysqlで「あいまい検索」をしたいです。

    phpとmysqlで「あいまい検索」をしようと思い、下記サイトを参考にしましたが、 http://d.hatena.ne.jp/akihito_sado/20120602/p1 PDOを使ってlikeデータを抜き出したい場合、bindParamを使うらしいですが、 http://rasukaru55.sitemix.jp/or_kensaku.php 下記の場合どう書き直すべきでしょうか? 打ち方が悪いのか、うまく作動しません。 教えてください。 ※bindParamを使えばSQLインジェクション対策になっていると言う事でしょうか? <html> <head></head> <body> <?php //POST送信されたデータを$text1へ $text1 =@$_POST["text1"]; //SQL(テーブルから列を抽出する $sql ="SELECT 列名 FROM 表名 "; //キーワードが入力されているときはwhere以下を組み立てる if (strlen($text1)>0){ //受け取ったキーワードの全角スペースを半角スペースに変換する $text2 = str_replace(" ", " ", $text1); //キーワードを空白で分割する $array = explode(" ",$text2); //分割された個々のキーワードをSQLの条件where句に反映する $where = "WHERE "; for($i = 0; $i <count($array);$i++){ $where .= "(列名 LIKE '%$array[$i]%')"; if ($i <count($array) -1){ $where .= " AND "; } } //別カラムも同じ検索したい $where2 = " OR "; for($i = 0; $i <count($array);$i++){ $where2 .= "(2列名 LIKE '%$array[$i]%')"; if ($i <count($array) -1){ $where2 .= " AND "; } } } ?> <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> <table> <tr> <td><input type="text" name="text1"></td> <td><input type="submit" value="検索" name="sub1"></td> </tr> </table> </form> <?php //組み立てたSQL分を表示する echo "<p>組み立てたSQL分: ".$sql.@$where.@$where2; ?> </body> </html>

    • ベストアンサー
    • PHP
  • テーブル上に存在しないデータの一覧を取りたい。

    mysql+phpで開発を行っています。 テーブル id 101 102 104 106 109 110 の様にデータが入っているテーブルaaaがあります。 プログラムで取得したid一覧が上記テーブルにレコードがあるのか確認するSQLは 例)select id from aaa where id in (101,102) で取得できるということは分かっています。 ここで select id from aaa where id in (102,103) とやると102の1件が取得できます。 今回知りたいことは 逆に取得できなかった103という値を取得する方法はないのかという事です。 select id from aaa where id=102; select id from aaa where id=103; 2回SQLを実行して値が戻ってこないSQL=テーブルにそのレコードが無いというプログラムを書けばいい事は分かっています。 しかし、処理が少なくとも数千回発生してしまう予定ですのでできれば別の方法がいいと思っています。 また、in区で使っている一覧はテーブルには入っておらず、また、こちらも数千個あるので、一時テーブルに入れるといってもかなりの時間がかかってしまうと思います。 何か一発で取得できるいい方法などありますでしょうか? ちなみにaaaテーブルは5万件ほどなので全件php側でメモリに展開してサーチも避けたいです よろしくお願いいたします。

  • sqliteでWHERE句に存在しないデータを削除

    PHPのsqliteで $sql=DELETE FROM TABLE WHERE C=データ $db->exec($sql) を使ったところ、WHERE句に存在しないデータがあると、エラーとなります。 sqliteで存在しなくてもエラーとならないような処理はどのようにしたらいいでしょうか?

  • WHERE句でのデータ型について

    お願い致します。 ORACLEのWHERE句に対する疑問点ですが、 カレンダを管理するテーブル(カレンダマスタ)において、条件を指定してデータをSELECTする時にWHERE句に記入するデータ型についてご指導お願いします。 <詳細> 目的としてカレンダマスタよりSYSDATEの年月の休みの日を除く、稼動日数(COUNT)を求めるのが、目的です。 自分で作成した、SQLでは目的を果たしているのですが、WHERE句にTO_CHARを使用し、抽出項目(年月日-DATE型)を指定しているのですが、条件を指定する時は、TO_CHARで指定しても問題は無いのでしょうか? <SQL> SELECT COUNT(TO_NUMBER(休みFLG)) AS 稼動日 FROM カレンダマスタ WHERE 年月日 BETWEEN (TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-1))+1,'YYYY/MM/DD')) AND (TO_CHAR(LAST_DAY(SYSDATE),'YYYY/MM/DD')) AND 休みFLG='0' <補足> 休みFLG='0'は稼動日

  • 「SELECT ~  FROM テーブル名」の後に続く句は「WHERE句」と「ORDER BY句」以外にありますか?

    最近アクセスのSQL文を学びました。 選択クエリのSQL文で 「SELECT ~  FROM テーブル名」 の後に続く句は 「WHERE句」と 「ORDER BY句」以外にありますか? よろしくお願いします。

  • PHPの参考書で分からないとこがあります

    PHPによるWebアプリケーションスーパーサンプル第2版のP.99のサンプルファイルにどうしても分からない箇所があります。 <html> <head> <title>絞込み検索キーワードをSQLに反映する</title> </head> <body> <?php // データを受け取る $text1 = @$_POST["text1"]; // SQL(ProductsテーブルからProductNameを抽出する) $sql = "SELECT ProductName FROM Products "; // キーワードが入力されているときはWHERE以下を組み立てる if (strlen($text1) > 0) { // 全角スペースを半角スペースに変換する $text2 = str_replace(" ", " ", $text1); // キーワードを空白で分割する $array = explode(" ", $text2); // 分割された個々のキーワードをSQLに反映する $where = "WHERE "; for ($i = 0; $i < count($array); $i++) { $where .= "(ProductName LIKE '%$array[$i]%')"; if ($i < count($array) - 1) { $where .= " AND "; } } } // 受け取った値を表示する echo "<p>検索キーワード:".$text1; // 組み立てたSQLを表示する echo "<p>組み立てたSQL:".$sql.@$where; ?> <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> <table> <tr> <td><input type="text" name="text1" value="<?php echo $text1?>"></td> <td><input type="submit" value="送信" name="sub1"></td> </tr> </table> </form> </body> </html> 上記の for ($i = 0; $i < count($array); $i++) { $where .= "(ProductName LIKE '%$array[$i]%')"; if ($i < count($array) - 1) { $where .= " AND "; } } の箇所なんですが、そこに複数ある「.(ドット)」は何を表しているのでしょうか? また、 if ($i < count($array) - 1) { $where .= " AND "; が行っている処理を教えて下さい。 初歩的な質問かもしれませんが、よろしくお願いします。

    • ベストアンサー
    • PHP
  • 複数のカテゴリを選択した上でLIKE検索

    こんにちは、SQL文の書き方について悩んでいます。 PHPとSQLITE3で複数キーワードの検索プログラムを作ろうとしています。 自分用の日記をSQLITE3のDBに記録しているもので、 main のカラムに本文を書いて、  kuwake で、hobby、work、other などカテゴリー分けをしています。 ※一つの記事にたいして、選択可能なkuwakeは一つだけです。 趣味(hobby) と 仕事(work) のカテゴリー の中で、 複数文字検索をしたいのですが、 以下のSQL文で動作しませんでした。  正しいSQL文の書き方をご教授ください。よろしくお願いします。 "SELECT 'hobby' and 'work' ''FROM '$table' WHERE 'main' LIKE '%キーワード1%' and main LIKE '%キーワード2%' ■テーブルの詳細↓ CREATE TABLE table (id INTEGER PRIMARY KEY, main TEXT, kuwake TEXT, date TEXT);

    • ベストアンサー
    • PHP