- PR -

SQLについて教えてください(MYSQL)

1
投稿者投稿内容
ふりふり
会議室デビュー日: 2007/03/13
投稿数: 11
投稿日時: 2008-06-21 19:40

MYSQLのSQLについての質問です。
初歩的な質問かも知れませんが
どうしても自己解決出来ないので
質問させていただきます。

下記のように日付と時刻が別々に格納されたDBより
2008/05/01 07:00:00から2008/05/03 07:00:00の
データ(ID1,2,3,4,5,6,)だけを抽出したいのですが、うまくいきません。

ID|createday |createtime
1 |2008/05/01|07:00:01
2 |2008/05/01|23:00:00
3 |2008/05/01|06:00:00
4 |2008/05/02|07:00:01
5 |2008/05/02|23:00:00
6 |2008/05/02|06:00:00
7 |2008/05/03|07:00:01
8 |2008/05/03|23:00:00
9 |2008/05/03|06:00:00

select * from db
where (createday >='2008/05/01' and createtime >='07:00:00'
or (createday <='2008/05/03' and createtime <='07:00:00'

としてみたのですが、思うようなデータにはならず、
下記のようにしてみても結局Whereがcreatedayを見ているので
正しい結果は得られませんでした。

select ID,concat((MID(createday,1,10)) , ' ',(MID(createtime,1,)) createday from db
where createday >= '2008/05/01 07:00:00' and createday < '2008/05/03 07:00:00'

concatのように結合したフィールドでWHERE条件をかければ
うまくいくのではないかと思うのですが、方法がいまいち分かっていません。
参考になるレスなどでも結構ですので、
宜しくご教授のほどお願い致します。





七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2008-06-21 19:58
select * from db
where
createday >='2008/05/01'
and createday >='2008/05/03'
and createtime >= 07:00:00

ででるんじゃないの TESTしてないけど
一つの方法としてすべて秒換算にしても求めていたものは出せる


忠犬
大ベテラン
会議室デビュー日: 2006/05/01
投稿数: 109
投稿日時: 2008-06-21 21:07
MySQLの質問をする場合は、バージョンを明記してください。

MySQL 4.0以前、MySQL 4.1、MySQL 5.0以降で、機能が大きく違いますし、一部の仕様変更もあります。

条件式では、

(1)検索対象の最初の日時以降
(2)検索対象の最後の日時以前
(3)(1)と(2)の間の日付

という、三つの条件が必要になります。

コード:
select *
 from db
 where createday='2008/05/01' and createtime>='07:00:00'
    or createday>'2008/05/01' and createday<'2008/0503'
    or createday='2008/05/03' and createtime<='07:00:00'




また、SQL Serverを除く主要RDBMSでは、SQL99で標準SQL入りした行値構成子(行値式)を実装しています。指定できる条件式に制限を持つRDBMSもありますが、MySQLは比較演算子に制限はなかったと思います。

コード:
select *
 from db
 where (createday,createtime)>=('2008/05/01','07:00:00')
   and (createday,createtime)<=('2008/05/03','07:00:00')

ふりふり
会議室デビュー日: 2007/03/13
投稿数: 11
投稿日時: 2008-06-22 12:06
皆様

非常に分かりやすくご説明いただきありがとうございます。

where (createday,createtime)>=('2008/05/01','07:00:00')
and (createday,createtime)<=('2008/05/03','07:00:00')
MYSQLのバージョンによるのか、この方法はSQLエラーとなりましたが
下記であれば、問題なく抽出できました。

select *
from db
where createday='2008/05/01' and createtime>='07:00:00'
or createday>'2008/05/01' and createday<'2008/0503'
or createday='2008/05/03' and createtime<='07:00:00'

(1)検索対象の最初の日時以降
(2)検索対象の最後の日時以前
(3)(1)と(2)の間の日付
という、三つの条件が必要になるという基本が理解できました。

有難う御座いました。


1

スキルアップ/キャリアアップ(JOB@IT)