• ベストアンサー

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) 上記のような感じでやってみたのですが、うまくいきません。 よろしくお願いします。

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

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

$sql="SELECT*FROM TABLE WHERE (year_uk=2004 AND month_uk BETWEEN 4 AND 12) OR (year_uk=2005 AND month_uk BETWEEN 1 AND 3) ANDじゃなくてORでしょ

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.2

ANDだと、 「2004年4月から12月の間であり2005年1月から3月の間でもあるデータ」 となってしまいます。 二つの期間の両方を満たすという条件にあてはまるものがあるはずありません。 ORにすれば、 「2004年4月から12月の間か2005年1月から3月の間のデータ」 となります。

全文を見る
すると、全ての回答が全文表示されます。

関連する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の日付型データを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;

  • 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
  • MySQL4で2つのテーブルを結び付ける方法

    MySQL4で2つのテーブルを結び付ける方法は 以下のどちらが正しいのでしょうか? (while文中でSQLを発行せずに、をSQL文1発で出す場合) um_ukがどちらのテーブルにも共通なモノとして、 ■1 SELECT * FROM a_table A,b_table B WHERE A.um_uk = $um_uk AND B.um_uk=$um_uk; ■2 SELECT * FROM a_table.A,b_table.B WHERE A.um_uk = $um_uk AND B.um_uk=$um_uk; また、どちらも間違っている場合正解をご教授下さい。

    • ベストアンサー
    • MySQL
  • インデックスを用いたbetween検索について

    Cで1~360000までのランダムな整数の列(col1)を含む100万件のデータを作成し(50MB弱)、 create table table1(・・・, col1 integer not null, ・・・); で作ったテーブルにload data infile文で挿入し、 create index index1 on table1(col1); でインデックスを作成しました。 select * from table1 where col1 between 1000 and 2000; といったような検索(約2500件ヒット)をしたいのですが、この検索ではインデックスを作らないテーブルのほうが速く検索できてしまいます。 select * from table1 where col1 between 100 and 200; のような検索(約250ヒット)ではインデックスの効果があり、高速検索ができますが。 環境はMySQL-5.0.26、ノートPC(256MB)、Fedora Core5、設定ファイルはMy-large.cnfを、ほぼそのまま使用しています。 上記のような少し大きめの検索範囲でもインデックスを用いた検索を改善する方法をご教授お願いします。何かのパラメータが決定的に足りないと思うのですが。

  • access での BETWEEN

    access2000 のテーブルから、SQL BETWEEN の処理が、うまく行きません・・。 環境 win2k VM 1.4.1_03-b02 テーブルは、  id    具具  1    3  2    9  3    12  4    5  5    8 なカンジです。 コードは、 String betWeen = "SELECT 具具 FROM goo WHERE 具具 BETWEEN 6 AND 13"; ResultSet rs = stm.executeQuery( betWeen ); エラー内容は、 java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 抽出条件でデータ型が一致しません。 です。 SQLは、あってると思うのですが、何か方言的なことなのでしょうか・・? 回答、宜しくお願います・・。

    • ベストアンサー
    • Java
  • PHPにタイムアップによるエラーはありますか?

    PHPのmysql_query関数にてMySQLに要請すると、例えば200件では結果が返ってくるのに、 5000件ではエラーになります。大したデータ量ではないと思いますが、 タイムアップなどでエラーになる事はありますでしょうか? SQL文 ------------------------------------------------------------- SELECT chart_total, chart_card, chart_date, Sum(chart_total) AS sum_total, Sum(chart_card) AS sum_card FROM chart_table WHERE extract(year from chart_date) = 2007 GROUP BY extract(year_month from chart_date) ORDER BY chart_date ------------------------------------------------------------- Linux 2.6.9-42.ELsmp PHP 4.4.4 MySQL 4.0.27

    • ベストアンサー
    • PHP
  • 一定以上の行があれば最大値を持つ行を削除するSQL

    MySQL5にて、あるテーブルの特定フィールドの数(つまりcount値)が一定値以上であれば、間引きのため別のフィールドの値で最大値をもつ行を削除するSQLを考案中です。 イメージとしては以下の通りですが、SQLとしては誤っており、また、冗長です。 DELETE FROM table WHERE id={$id} AND (SELECT COUNT(*) FROM table WHERE id={$id}) > 5 AND begin = (SELECT MAX(begin) FROM table WHERE id={$id}); よい知恵をお授けください。

    • ベストアンサー
    • 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
  • SQL、between の指定方法について

    こんにちは、SQLについての質問なのですが、 PHPで以下のように、テキストボックスを指定して、値を検索 するような作りにしています。 print "<table><tr align=center>"; print "<td align=left>◎日付検索<br>"; print "<input type=text name=s_hiduke></td>\n"; print "<td align=left>◎入力者<br>"; print "<input type=text name=s_name></td>\n"; $where = ''; if($s_hiduke != ""){ $where .= $where ? "and s_hiduke~'$s_hiduke' ":"where  s_hiduke~'$s_hiduke' "; } if($s_name != ""){ $where .= $where ? "and s_name~'$s_name' ":"where  s_name~'$s_name' "; } if (!$sql) { $sql = "select * from syuhou_table ".$where;} else {$sql = str_replace("\\","",$sql);} 今回日付の部分にテキストボックスをもう一つ追加し、「5/10~5/15」 のように期間指検索が定出来るようにする為以下のようにソースを 変更したのですが上手く動作しません… print "<input type=text name=s_hiduke>~<input type=text name=s_hiduke2>&nbsp;&nbsp;</td>\n"; $where = ''; if($s_hiduke != ""){ $where .= $where ? "and s_hiduke~'$s_hiduke',  s_hiduke2~'$s_hiduke' ": "where s_hiduke between    s_hiduke~'$s_hiduke' and s_hiduke2~'$s_hiduke' "; } 何処を直せば正常に動くのか、お分かりになる方がいらっしゃいま したら、アドバイス頂けませんでしょうか。 長々とした文章になってしまい申し訳ございませんが、よろしく お願いいたします。