電子書籍の厳選無料作品が豊富!

お世話になります。

T-SQL(SQL Server2000)で月数の差の求めたいのですが、良い方法がないでしょうか?

関数の中に"DATADIFF"というものがありますが、これだと↓

SET @l_day1 = CONVERT(DATETIME,'2008/10/31',120)
SET @l_day2 = CONVERT(DATETIME,'2008/11/01',120)

DATADIFF(MONTH,@l_day1,@l_day2)

/* 結果 */
1

"2008/10/31" と "2008/11/01" の24時間の差の場合でも、結果に月数のさは"1"と出てしまいます。

上記の改善方法、又は、月数の差を求めれるロジック等をご存知の方が居ましたらお知恵をお貸しください。

宜しくお願い致します。

A 回答 (6件)

10/31の1ヶ月後はいつなんだという疑問は残りますが、やりたいことが


> 上記日付1と日付2の期間の差が1ヶ月以内の場合は
>   SET 変数A = '1ヶ月以内です'
> それ以外の場合は、
>   SET 変数A = '1ヶ月以上です'

ということであれば、こういう方法はどうでしょう?

set @l_day1 = DateAdd(d,-1,DateAdd(m,1,@l_day1))
select case when @l_day1 > @l_day2 then '1ヶ月未満' else '1ヶ月以上' end

基準となる日に1月を足して1日引いたものと比較するというものです。
    • good
    • 0

お詫び:



私の回答は、多分、間違っています。
テストもしていませんので。
で、一切、無視されてください。
    • good
    • 0

Format("2008/10/17", "dd") > Format("2008/11/17", "dd")-->0


Format("2008/10/16", "dd") > Format("2008/11/17", "dd")-->1

年齢補正ではなかったですね!
    • good
    • 0

>今日"2008/10/17"の1ヵ月後は、翌月の"2008/11/17"が1ヶ月後ですよね?



いわゆる満年齢計算に準じたやり方をしたいということですね。

Public Function GetAge(ByVal Birthday As Date, ByVal Hiduke As Date) As Long
  GetAge = DateDiff("yyyy", Birthday, Hiduke) + _
       (Format(Birthday - 1, "mm/dd") > Format(Hiduke, "mm/dd"))
End Function

DateDiff("mm", "2008/10/18", "2008/11/17")-->1
DateDiff("mm", "2008/10/17", "2008/11/17")-->1

Format("2008/10/17", "mm/dd") > Format("2008/11/17", "mm/dd")-->0
Format("2008/10/16", "mm/dd") > Format("2008/11/17", "mm/dd")-->1

この両者の合計値は 1 ないし 2
で、-1すれば0と1

ロジックはこういうことだと思います。
    • good
    • 0

1ヶ月は必ず30日なのですか?

この回答への補足

今日"2008/10/17"の1ヵ月後は、翌月の"2008/11/17"が1ヶ月後ですよね?

処理としては、
例)
 日付1 = '2008/10/10'
 日付2 = '2008/11/09'

 上記日付1と日付2の期間の差が1ヶ月以内の場合は
   SET 変数A = '1ヶ月以内です'
 それ以外の場合は、
   SET 変数A = '1ヶ月以上です'

のような処理を行いたいのですが、伝わりましたでしょうか?
実際に処理を行うときは、日付は任意で入力される為
固定で30日で比較してしまうと日にちが合わなくなってしまいます・・・

補足日時:2008/10/17 15:55
    • good
    • 0

Select DateDiff(MONTH, '2008/10/31', '2008/11/30')



1

Select DateDiff(MONTH, '2008/10/29', '2008/11/30')

1

ですよね。

で、どういうロジックなのでしょうか?

この回答への補足

肝心なことを記述するのを忘れてしまいました;;
申し訳ありません。

DateDiffでは月を跨いだだけで差が"1"と出てしまうので、
"2008/10/31" と "2008/11/01" を比較した場合の差は"0"とし、
"2008/10/31" と "2008/11/29" を比較した場合の差は"1"というようにさを出したいのですが・・・

うまく伝わったでしょうか?

補足日時:2008/10/17 14:47
    • good
    • 0

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