重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

mysql5.1を利用してデータベースを作成しています。
テーブルに年と月を別々で収納しているのですが、
そのテーブルの中のデータから「今月を過ぎていなければ」という条件で抽出したいのですが、
SQLの書き方がわかりません。

私のSQLの基礎の基礎しか教えてもらっておらず、
あとは独学で、現在のレベルはようやく少しサブクエリを書き出した(学びだした)レベルです。
しかもwindows上のNavicat Lite(アプリ)上で書いてる状態です。

自分のイメージ的には下記のような感じなのですが、動きません。
どなたか教えていただけないでしょうか。
よろしくお願いします。
hoge_tblテーブルからBカラムが'hoge'かつ、
hoge_tblテーブル内のYEARカラムとMONTHカラムの値を今月と比較して、
「今月を過ぎていなければ」といった条件を付けたいと考えております。

select A from hoge_tbl where B = 'hoge' and
(select date_format(now(),'%Y%m') as NOW) <
(select date_format('(select YEAR,MONTH from hoge_tbl )’,'%Y%m') as END)

A 回答 (3件)

SELECT A FROM hoge_tbl WHERE B='hoge' AND


DATE_FORMAT(NOW(),'%Y%m')<
CONCAT(YEAR,CASE LENGTH(MONTH) WHEN 1 THEN '0' ELSE '' END,MONTH)
です。
ただし、年、月をCHARで設定する方法はあまりお勧め出来ません。
    • good
    • 0
この回答へのお礼

お礼が遅くなって申し訳ありません。
長い時間かかってようやく解決いたしました。(ずっとやっていたわけではありませんが。。。)

文法的に教えていただいた記述の内容が理解できたのですが、
そうしてもうまく動かず、自分におデータベースの作成内容に疑問を持ってしまい、YEARとMONTHをそれぞれ比較して動かしていたところ、年を過ぎるところでおかしくなりました。

また今回実数を代入してみたり、あれこれ試してみたところ、結局 『 ' 』 の記述する部分などに誤りがあったようで、『 ' 』が必要な部分と不要な部分をあれこれ試して結果うまくいきました。

うまくいった文を教えていただいたものと比較したところ、まったく教えていただいた通りでした。。。
回り道をしてしまい、かつお礼が遅くなってしまってすみません。

ただ最初に教えていただいた内容の文法を理解して、今回あらためて取り組んだことにより解決できました。
本当にありがとうございました。

お礼日時:2012/09/22 12:38

まず、数字をcharで管理すると状況によって想定外の結果を返す場合が


あることを理解しなくてはいけません。
とくにSQLでその手の持ち方をすると効率もわるく、あまりお勧めしません。

ちなみにサブクエリを覚えたてでなんとなく使いたいころなのでしょうけど
これはサブクエリで処理する内容じゃないと思いますよ・・・

ロジックとしては・・・
今日の年がYEAR以下か、今日の年がYEARと同等かつ今日の月がMONTH以下
と考えれば、こんな感じ?

select A from hoge_tbl where B = 'hoge' and
(YEAR(@TODAY:=CURDATE())<`YEAR`
OR YEAR(@TODAY)=`YEAR` AND MONTH(@TODAY)<=`MONTH`)
    • good
    • 0
この回答へのお礼

お礼が遅くなって申し訳ありません。
見ようみまねでやっていたのですが、どうしても動かず

DATE_FORMAT(NOW(),'%Y') <= YEAR AND DATE_FORMAT(NOW(),'%m') <= MONTH

のようにしていましたが、当然年をまたぐところでうまくいかなくなってしまいました。
今一度やりなおしてみたところうまくいきました。

ありがとうございました。

お礼日時:2012/09/22 12:30

データ型をどう設定しているかによってSQLが変わります。

この回答への補足

回答ありがとうございます。
そうなんですね。

YEARはchar、長さ8、少数0、
MONTHはchar、長さ4、少数0、
に設定しています。
YEARは数字4ケタで収容してあり、
MONTHは数字1ケタまたは2ケタ(1ケタの場合でも頭に'0'はついていません)
で収容しております。

よろしくお願いいたします。

補足日時:2012/04/16 12:26
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す