
No.4ベストアンサー
- 回答日時:
#2です。
SQL99で規定され、MySQLでも実装されている行値構成子(または行値式)と呼ばれる構文を使えば簡単です。
where (年,月,日)>=(2007,1,1) and (年,月,日)<=(2008,5,5)
#3さんの提示したようなSQLでも実現できますが、条件式で関数を使ったりして列を加工すると、MySQLの場合、インデクスが使われない場合が多いので、性能を重視する場合はEXPLAINで十分に確認してください。
>MySQLの場合、インデクスが使われない場合が多いので、性能を重視する場合はEXPLAINで十分に確認してください。
そういう制限がやはりMYSQLでもあるんですね、よく確認してみます。
いろいろ考えてこのようなクエリを書いてみました。
where ((t_yyyy <= 2008 ) && ( t_yyyy <= 2008 && t_mm <= 5 ) && ( t_yyyy <= 2008 && t_mm <= 5 && t_dd <= 5 )) && (( t_yyyy >= 2007 ) && ( t_yyyy >= 2007 && t_mm >= 1 ) && ( t_yyyy >= 2007 && t_mm >= 1 && t_dd >= 1 ))
やってることはchukenkenkou様のサンプルと同じだと思いますが、長い上にわかりづらいですね。
chukenkenkou様のサンプルを参考にもう一度どうすればよいのか
よく考えてみます!
ありがとうございました。
No.3
- 回答日時:
各カラムの値を使って、DATE型の値を作ってBETWEENで比較すれば良いと思いますよ。
SELECT * FROM table WHERE DATE(concat_ws('-',yyyy,mm,dd)) BETWEEN '2007-01-01' AND '2008-05-05';
お返事ありがとうございます。返信が遅れて申し訳ございません。
実行可能なサンプルまでいただいて感謝しております。
ありがとうございます!!
No.2
- 回答日時:
日付が入っている列のデータ型は、date型ではないのですか?
年月日を、それぞれ別の列に格納しているのでしょうか?
この回答への補足
回答ありがとうございます。返信が遅れて申し訳ございません。
私の説明不足でした。
年_yyyyと月_mmと日_ddという3つのデータ型に分かれており、
3つともint型です。
そのため、年、月、日で3回betweenを使って検索したところ、
半端な結果しか得られなかったということです。
今考えている別の方法があるのですが、
今度はこういう形で検索してみたいと思います。
2007年1月1日から2008年5月5日までの範囲を検索したとします。
最初の2007年1月のデータをまずとりだす式を書きます。
それをORで2008年5月以外の2007年2月から2008年4月の間を検索する式と繋ぎ、
最後に2008年5月1日から5日までのデータを検索する式とまた
ORでつなげればうまくいくかなぁと。
書いた式は
select * from table where yyyy = 2007 && mm = 1 && dd between 1 and 31 or
yyyy between 2007 and 2008 && mm between 1 and 12 && dd between 1 and 31 or
yyyy = 2008 && mm = 5 && dd between 1 and 5;
です。しかし、orで繋げた2つめの式で2008年の5月のデータがすべて読み込まれているので、
5日までではなく、31日まで表示されてしまいました。
う~ん、日付を3つのint型になんてわけなければよかったです。
もう間の値は年ごとに検索するしか方法はないのでしょうか?
説明がわかりづらくて申し訳ないです。
アドバイスよろしくお願いします。
No.1
- 回答日時:
>年、月をまたがなければbetweenで指定できるのはわかりました。
情報元は??
指定日 between '2007-01-01' AND '2008-05-05'
でいけるでしょ?
この回答への補足
回答ありがとうございます。返事が遅れました。
年、月、日と3つのint型にわかれています。
>年、月をまたがなければbetweenで指定できるのはわかりました。
は、選択された範囲が2008年5月のみならば、1日から5日までの
検索はできるということです。誤解を招く書き方でした、申し訳ないです。
ANO.2の捕捉に改めて書いた式を記載させていただきましたので、
アドバイス等いただければありがたいです。
私の説明力不足で申し訳ありませんでした。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Twitter 高度な検索 日付 単語 リンクをOutlook で送信 2 2022/06/18 18:36
- その他(教育・科学・学問) なぜか毎月同じアクセス数 1 2022/09/11 00:15
- Access(アクセス) Accessフォーム 一部のレコードだけを抽出する方法について 1 2022/06/28 18:45
- その他(ブラウザ) Android Google でなく Bing検索すれば 何検索したかわからずデータ収集されない? 2 2023/03/10 05:25
- その他(SNS・コミュニケーションサービス) Yahoo!とGoogle検索のしくみの違いを教えてください 2 2022/08/14 01:53
- 不動産鑑定士・土地家屋調査士 合筆された地積測量図の取得(登記情報提供サービス) 1 2022/07/13 00:30
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
- Google Maps iPhoneのGoogle検索窓を通常の大きさに 戻す方法を教えて頂けませんか?(切実) 日本全国の 2 2022/10/02 02:08
- Excel(エクセル) Excel 数行を1組とする300組ほどあるデータの項目を揃えたいです。 3 2023/01/26 19:38
- Excel(エクセル) セルの値をグーグルで検索するエクセルVBAについて! 2 2022/08/01 21:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブルの列数を調べたい
-
MYSQLで小数点を表示する場合と...
-
[MySQL]LOAD DATA INFILE一部レ...
-
同一日に複数レコードがある場...
-
ホームページを作ろうと思いま...
-
SELECT文で、指定カラム以外の...
-
DBの定義のサイズを大きくし過...
-
他のシートの検索
-
SQLでカラムを追加し、条件に合...
-
一部のカラムでdistinctし全て...
-
INDIRECT関数の代替方法は?
-
GREATESTで NULLをスルーする方...
-
PHP 画像のアップロード Qiita
-
【Transact-sql】 where条件、i...
-
SQLです!!教えてください。
-
UNIONする際、片方テーブルしか...
-
頭に0が付く文字
-
MYSQLで全てのカラムから検索す...
-
mysqlで50音順にorder byしたい。
-
WHERE `年月日` = '晴' OR `年...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブルの列数を調べたい
-
同一日に複数レコードがある場...
-
group byで最後のレコードを抽...
-
[MySQL]LOAD DATA INFILE一部レ...
-
MySQL 改行コードを含む文字列...
-
MYSQLで小数点を表示する場合と...
-
select * での表示が崩れる?
-
MySQL AUTO_INCREMENTが最大に...
-
WHEREなどの条件が多い場合、ど...
-
フレンドリストのようなものを...
-
betweenを使うyyyy/mm/ddでの範...
-
[MYSQL]日付のカラムにデーター...
-
時間範囲が重複したレコードを...
-
VB.NETでSQL-SERVERにクエリを...
-
MySQLについて
-
MySQLでカラム内の値の先頭の数...
-
mysqlで年と月を別々のカラムに...
-
whereの使い方が分からないので...
-
データベースについて
-
MySQL テーブルの一部のカラム...
おすすめ情報