プロが教えるわが家の防犯対策術!

INT型の日付(20070621)をWHEREでその月の1日から末日までを指定したいのですが、どのようなSQLを書けばよいのでしょうか?ちなみに下記に私が書いたものを記載しますが、もっと効率のよい方法はないのでしょうか?
1日を指定
day > { fn CONCAT({ fn CONCAT(LEFT(LEFT({ fn CURDATE()}, 7), 4), RIGHT(LEFT({ fn CURDATE() }, 7), 2)) }, '01') })
末日の指定
day < { fn CONCAT({ fn CONCAT(RIGHT(LEFT(DATEADD(d,-1,{ fn CONCAT({ fn CONCAT(RIGHT(LEFT(DATEADD(m, 1, { fn CURDATE() }), 10), 4), LEFT(LEFT(DATEADD(m, 1, { fn CURDATE() }), 10), 2)) }, '01') }),
10), 4), LEFT(LEFT(DATEADD(d, - 1,{ fn CONCAT({ fn CONCAT(RIGHT(LEFT(DATEADD(m, 1, { fn CURDATE() }), 10),4), LEFT(LEFT(DATEADD(m, 1, { fn CURDATE() }), 10), 2)) }, '01') }), 10), 2)) },
RIGHT(LEFT(LEFT(DATEADD(d, - 1, { fn CONCAT({ fn CONCAT(RIGHT(LEFT(DATEADD(m, 1, { fn CURDATE() }), 10),4), LEFT(LEFT(DATEADD(m, 1, { fn CURDATE() }), 10), 2)) }, '01') }), 10), 5),

A 回答 (3件)

1日の日付はcastoffさんのやり方で取得できます。


Cast(LEFT('20070621',1,6) + '01' as DateTime)

翌月の1日は上記をDateAdd関数で1月進めることで取得できます。
DateAdd(m,1,Cast(LEFT('20070621',1,6) + '01' as DateTime))

where句には

day >= 当月の1日
and day < 翌月の1日

と記述すると当月分が指定できます。
    • good
    • 0

1日


Cast(LEFT('20070621',1,6) + '01' as DateTime)
※DDを01へ

末日
DateAdd(day,-1,LEFT(DateAdd(month,1,Cast('20070621' as DateTime)),1,6) + '01'))
※翌月の1日を求めたあと、前日を求める

でいいですか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
回答を参考に末日指定を
DATEADD(day, - 1, DATEADD(month, 1, CAST(LEFT ({ fn CURDATE() }, 7) + '-01' AS datetime)))
というようにしました。結果は2007/06/30というようになりましたが、これをINT型の「20070630」にしたい場合は上記の式をどのようにすればよいのでしょうか?

お礼日時:2007/06/21 14:18

単純に、INT型の日付(20070621)を100で割った値で比較すればよいのでは?



20070621/100=>200706

比較したい値が、この値と等しければ、同月内とか出来そうな気が…
    • good
    • 0
この回答へのお礼

回答ありがとうございます。その方法だと月が変わるごとにWHEREの中を変えないとだめですよね?年月を指定する値を自動で出てくるようにしたいんですが

お礼日時:2007/06/21 12:47

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