
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側で計算してもらってレコ...
-
テーブルの列数を調べたい
-
MySQL AUTO_INCREMENTが最大に...
-
IDENTITYを設定
-
SQLServerでNULLを挿入したいです
-
SQLの書き方
-
一部のカラムでdistinctし全て...
-
SQLServer 複数列から同一語を検索
-
T-SQL 優先順によるデータの抽出
-
同テーブルで指定カラム値を相...
-
sqlite3でrowid以外にid必要で...
-
巨大テーブルからインデックス...
-
頭に0が付く文字
-
Accessで複数(3以上)...
-
MySQLで論理名を取得する方法
-
データベースのクエリについて...
-
group_concatを複数列に設定する
-
【Transact-sql】 where条件、i...
-
MYSQLで全てのカラムから検索す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
group byで最後のレコードを抽...
-
テーブルの列数を調べたい
-
[MySQL]LOAD DATA INFILE一部レ...
-
select * での表示が崩れる?
-
MYSQLで小数点を表示する場合と...
-
WHEREなどの条件が多い場合、ど...
-
MySQL 改行コードを含む文字列...
-
誤って削除したIDカラムを復元...
-
時間範囲が重複したレコードを...
-
MySQL AUTO_INCREMENTが最大に...
-
「VARCHAR(255)」を「text」に...
-
フレンドリストのようなものを...
-
mysqlでカンマデータのgroup by
-
betweenを使うyyyy/mm/ddでの範...
-
MYSQLのストアドでの動的SQLに...
-
MySQLでのデータ入力について
-
[MYSQL]日付のカラムにデーター...
-
重複の場合は1件のみ取込む処理
-
MySQL SELECT WHERE 条件 大量
-
MySQLでカラム内の値の先頭の数...
おすすめ情報