• 締切済み

MySQLの日付型データをBetweenで抽出する方法

MySQL で格納したデータを Perl を使ってブラウザに出力したいのです が、日付型で格納したデータを Between で範囲を指定して出力しても 条件通り出力できません。 Between 式が間違っているまでは把握しているのですが、修正方法が 分かりません。どなたか教えていただけませんか? # $form->param('combo1')は、2006 が格納されている $date1 = $form->param('combo1') . "/04/01"; $date2 = $form->param('combo1')++ . "/03/31"; # $date1 の値は、2006/04/01 # $date2 の値は、2007/03/31 $sql = "SELECT Itaku_Date FROM table WHERE "; $sql .= "Between " . $date1 . " And " . $date2;

  • Perl
  • 回答数1
  • ありがとう数6

みんなの回答

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.1

where と between の間にフィールド名が抜けています。 英語で言うと主語が抜けているわけです。 日付が格納されているフィールドが Itaku_Date であるなら、 " where Itaku_Date between "... という書き方です。 また、日付の区切りは"/"ではなく"-"を使いましょう。 さらに、日付の文字列はシングルクォートでくくりましょう。 '2006-04-01'などとするのが正しいです。

Marute
質問者

お礼

Between 構文の件ありがとうございました。 更に、日付の文字列をシングルクォートでくくるやyyyymmddの書式を ハイフンにするという細かな助言を頂き無事に SELECT できました。 ありがとうございました。

関連するQ&A

  • date型でのbetweenについて教えてください。

    皆様、新年明けましておめでとうございます。 早速ですが、date型でのbetweenについて教えてください。 SQL文 SELECT * FROM test WHERE date between date '2007-12-01' and date '2007-12-31' を発行すると、2007-12-31のレコードがあるのに該当しません・・・ 試しにSQL文を SELECT * FROM test WHERE date between date '2007-12-01 00:00:00' and date '2007-12-31 23:59:59' としても2007-12-31のレコードは検索されません・・・ SQL文を SELECT * FROM test WHERE date between date '2007-12-01' and date '2008-01-01' にすると2007-12-31が該当するのですが、 SELECT * FROM test WHERE date between date '2007-12-01' and date '2007-12-31' では2007-12-31のレコードは該当しないものでしょうか?? select * from test where num between 10 and 100 とした場合では、num が 10 ~ 100 のものが問い合わされますよね?? date型になるとこうならないのでしょうか?? よろしくお願いします。

  • MySQLで戻り値が重複している

    PHPとMySQLを使っています。 下のようなSQL文を作成し、値を引き出そうとしています。 <SQL文> SELECT * FROM table_name WHERE A = "あ" AND B='い' <DBに登録済みの取り出したいデータ> あ、い、う、え、お ところが、戻ってくる値が、 あ、あ、い、い、う、う、え、え、お、お のように、値が重複して戻ってきます。 いろいろ調べましたが、原因がさっぱりわかりません。 ご存知の方、教えていただけると助かります。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • BETWEEN を2つ以上使用する方法はありますか?

    MySQL4.0.1 PHP4.3.9 Windows2000sp4 BETWEEN を2つ以上使用する方法はありますか? 例えば2004年4月から12月のデータと2005年1月から3月のデータを取り出したいのですが。。。 $sql="SELECT*FROM TABLE WHERE (year_uk=2004 AND month_uk BETWEEN 4 AND 12) AND (year_uk=2005 AND month_uk BETWEEN 1 AND 3) 上記のような感じでやってみたのですが、うまくいきません。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • PDOのデータ取得方法について

    お世話になります。 以前まで「mysql_query」でSQLを実行していたのをPDOで行うように変更しております。 prepareの「?」の部分までのSQLにした場合(1)、データ取得出来ますが (2)ですとエラーも返ってこなくデータ取得出来ません。 色々と試してはいますが、全く出来なくて大変困っています。どうかご教示くださいませ。 1)SELECT * FROM table WHERE data_code = ? and data_code2 = ? 2)SELECT * FROM table WHERE data_code = ? and data_code2 = ? and (data_code3 = "null" or data_code3 is null or data_code3 = "") ※PHP5.3、MySQL5.0です。

    • 締切済み
    • PHP
  • 日付型(時刻含む)を抽出条件にして行を抽出したい。

    はじめまして、よろしくお願いします。 現在SQLサーバー2000を使用してこの処理を行おうと思っております。 一度テーブルに格納したデータをSELECT文を使って抽出したい と思っているのですが、WHERE条件に日付型のフィールドを指定するとうまく行きません。(時刻が日付型のフィールドに入っている場合、うまくいきません。) やっていることは YMD(DATE型・主キー)、ID(VERCHAR型・主キー)、NAME(VERCHAR型) というのテーブル(テーブル名:MEIBO)に入っている 2002/02/02 14:10:55、0001、山田 太郎 というデータを 取込年月日、個人IDを指定して特定の列を取り出そうとしています。 SQL文は SELECT * FROM MEIBO WHERE YMD = '2002/02/02 14:10:55' AND ID = "0001' と記述していますが、一件もヒットしません。 DATE型のフィールドにはINSERTするときにGETDATE()をつかってシステム日付を 格納するようにしています。 GETDATE()ではなく、DATE()を使ってシステム日付を格納した 2002/02/02、0001、山田 太郎 という時刻の入っていないデータに対しては SELECT * FROM MEIBO WHERE YMD = '2002/02/02' AND ID = "0001' というSQL文でヒットするのですようです。 時刻が入ったらそのフィールドを抽出条件として使うことは無理なのでしょうか? 基本的な部分で勘違いしているのかもしれませんが なにかお気づきの点がありましたら、ご教授ください。

  • MySQLで昇順に並べ替え

    MySQL(データベース)で商品名と価格を格納したテーブル(syouhin)があります。商品名のキーワードを入力するフォーム(form.html)とデータを受け取る(kensaku.php)があり、以下のようにデータを表示させています。 <!-- form.html --> <html> <head> <title>商品名と価格</title> </head> <body> <form method="get" action="kensaku.php"> <input type="text" name="name"> <input type="submit" name="submit" value="検索"> </form> </body> </html> //kensaku.php <? $name=$_REQUEST["name"]; $conn = mysql_connect ("localhost", "username", "password") or die ('接続できませんでした'); mysql_select_db ("db",$conn); //クエリ生成 $sql = "select * from syouhin where name like '%$name%'"; $res = mysql_query($sql); while($row = mysql_fetch_array($res)){ echo "<table border='1' cellpadding='0' cellspacing='0'>"; echo "<tr>"; echo "<td>".$row[name]."</td>"; echo "<td>".$row[price]."</td>"; echo "</tr>"; echo "</table>"; } ?> ここから質問なんですが、今結果が表示されているまさにそのページで、並べ替えをしたいのです。よく検索結果の並べ替えで、[価格の安い順に並べる]をクリックすると並び変わるのがありますよね。それと同じ事をしたいのです。 僕が考えた方法は、もう一つのページ(例えば、kensaku_asc.php)を作って、 $sql = "select * from syouhin where name like '%$name%'"; の部分だけを $sql = "select * from syouhin where name like '%$name%' order by price"; に変えて、そのページにリンクさせる。でもその場合、form.htmlから受け取ったデータ(ここでは商品名のキーワード)を引き継ぐという事ができないので、そのあたりのところのヒントをいただければと存じます。よろしくお願いします。

    • 締切済み
    • PHP
  • データ内の「\」や「'」を抽出するには

    データ内に「\」や「'」が含まれているデータを抽出するには SELECT * FROM table WHERE column LIKE '%\%' SELECT * FROM table WHERE column LIKE '%'%' で良いのでしょうか?

    • ベストアンサー
    • MySQL
  • PHPでMySQLのSET @hoge:=□;は?

    ・PHPで、MySQLのSET @hoge:=□;は使えないのでしょうか? ・一度SQL経由で取得したデータをPHPでセットして、再度SQL発行するしかない? ■やりたいイメージ $sql = ' SET @hoge:=□; SET @piyo := ■; SELECT * FROM temp WHERE date BETWEEN @min AND @max; '; $sth = $pdo->prepare($sql);

    • 締切済み
    • PHP
  • MySQLでデータを時間範囲で抽出したい

    mysqlでテーブルから、日付データが1ヶ月以内でかつ7時から8時までのデータを抽出する方法がわかりません。 テーブル内のtimeカラムにはタイムスタンプ型で日付が入っています。 time「2012-06-04 07:14:38」 time「2012-05-04 10:14:38」 time「2012-05-04 08:14:38」 time「2012-05-04 13:14:38」 SELECT * FROM table WHERE time >= DATE_ADD(NOW(),INTERVAL -1 MONTH) で1ヶ月以内のデータは抽出できたのですが、さらに7時から8時までのデータを抽出する方法が分からずかなり困っています。 どなたかご教授お願いいたします。

  • PHPでのMySQLデータ抽出でおかしな現象

    お世話になります。 是非、知恵を貸していただきたく投稿させていただきました。 PHPにてMySQLのデータを持ってくる際におかしな現象がおきております。 登録日(entry_date)をデータ型datetime持つテーブルがあります。 そのテーブルに対し、以下のSQL文を発行し実行したところ、phpmyadminでは正常に動作するのに、PHPではある日付でのみ結果がおかしいという現象が発生しました。 ●正常パターン(2016-01) SELECT COUNT(*) AS cnt FROM テーブル WHERE DATE_FORMAT(entry_date, '%Y-%m')='2016-01'; phpmyadmin上で動作させた結果 cnt --- 155 phpで動作させた結果 Array ( [0] => Array ( [cnt] => 155 ) ) ●異常パターン(2017-01) SELECT COUNT(*) AS cnt FROM テーブル WHERE DATE_FORMAT(entry_date, '%Y-%m')='2017-01'; phpmyadmin上で動作させた結果 cnt --- 19 phpで動作させた結果 Array ( [0] => Array ( [cnt] => 0 ) ) 異常になるのは、何故か日付指定が「2017-01」の場合のみで、他の日付では問題ありません。 「2017」年のほかの日付はまだ存在しないので、そちらは確認できないのですが。 PDOが駄目なのかと思い、PDO以外でも実行してみましたが、結果は変わりませんでした。 ちなみに、SQL文で、DATE_FORMATを利用せずに、 entry_date LIKE '2017-01%' や entry_date between '2017-01-01 00:00:00' and '2017-01-31 23:59:59' なども実行してみたのですが、結果は一緒でした。 検索日付で動作がおかしくなるなんてことがあるのでしょうか・・・ <<環境>> さくらスタンダード mysqlバージョン:5.5 phpバージョン:5.3 もし何か思い当たること等ございましたら、ご教授願いたく思います。 よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう