-1

イベントテーブルがあり、次の列を使用してイベントを保存します

EventID INT
EventName VARCHAR(50)
BeginMonth TINYINT
BeginDay TINYINT
EndMonth TINYINT
EndDay TINYINT

以下にいくつかの例を示します。records

EventID EventName  BeginMonth BeginDay EndMonth EndDay
  1      Event-1     3           1        6      17
  2      Event-2     5           10       8      15
  3      Event-3     11           5       2      13

注意 : イベントは毎年発生するため、年の値は保存されません。そのため、endmonth が beginmonth よりも小さい可能性があります (レコード番号 3)。これは、イベントが 1 年に始まり、次の年に終わることを意味します。

今、現在の日付に基づいてすべてのイベントを提供する ms sql クエリが必要です。現在の日付に年を使用しないとよいでしょう。

4

1 に答える 1

3

あなたの質問が正しければ、次のQueryことがうまくいきます。

Select *

FROM Events
WHERE --CONVERT(DATE,GETDATE()) BETWEEN
CONVERT(date,dateadd(day,datediff(day,1,GETDATE()),0)) BETWEEN
CAST((CAST(case when CAST([BeginMonth] as Varchar)> (select datepart(month,getdate())) 
THEN (select datepart(YEAR,getdate())-1)
when CAST([BeginMonth] as Varchar)= (select datepart(month,getdate()))
AND CAST([BeginDay] as Varchar)> (select datepart(month,getdate()))
THEN (select datepart(YEAR,getdate())-1)
when CAST([BeginMonth] as Varchar)= (select datepart(month,getdate()))
AND CAST([BeginDay] as Varchar)= (select datepart(month,getdate()))
THEN (select datepart(YEAR,getdate()))
when CAST([BeginMonth] as Varchar)= (select datepart(month,getdate()))
AND CAST([BeginDay] as Varchar)< (select datepart(month,getdate()))
THEN (select datepart(YEAR,getdate())) 
ELSE (select datepart(YEAR,getdate())) END AS VARCHAR)
+'-'+
CAST([BeginMonth] as Varchar)
+'-'+
CAST([BeginDay] as Varchar)) as DATE) 
AND
CAST((CAST(case when CAST([BeginMonth] as Varchar)> (select datepart(month,getdate())) 
THEN (select datepart(YEAR,getdate())-1)
when CAST([BeginMonth] as Varchar)= (select datepart(month,getdate()))
AND CAST([BeginDay] as Varchar)> (select datepart(month,getdate()))
THEN (select datepart(YEAR,getdate())-1)
when CAST([BeginMonth] as Varchar)= (select datepart(month,getdate()))
AND CAST([BeginDay] as Varchar)= (select datepart(month,getdate()))
THEN (select datepart(YEAR,getdate()))
when CAST([BeginMonth] as Varchar)= (select datepart(month,getdate()))
AND CAST([BeginDay] as Varchar)< (select datepart(month,getdate()))
THEN (select datepart(YEAR,getdate())) 
ELSE (select datepart(YEAR,getdate()))+1 END AS VARCHAR)
+'-'+
CAST([BeginMonth] as Varchar)
+'-'+
CAST([BeginDay] as Varchar)) as DATE) 

SQL フィドル

更新されたフィドル

私は私のMistake.

Select *

FROM Event
WHERE CONVERT(DATE,GETDATE()) BETWEEN

CAST((CAST(case when CAST([BeginMonth] as Varchar)> (select datepart(month,getdate())) 
THEN (select datepart(YEAR,getdate())-1)
when CAST([BeginMonth] as Varchar)= (select datepart(month,getdate()))
AND CAST([BeginDay] as Varchar)> (select datepart(month,getdate()))
THEN (select datepart(YEAR,getdate())-1)
when CAST([BeginMonth] as Varchar)= (select datepart(month,getdate()))
AND CAST([BeginDay] as Varchar)= (select datepart(month,getdate()))
THEN (select datepart(YEAR,getdate()))
when CAST([BeginMonth] as Varchar)= (select datepart(month,getdate()))
AND CAST([BeginDay] as Varchar)< (select datepart(month,getdate()))
THEN (select datepart(YEAR,getdate())) 
ELSE (select datepart(YEAR,getdate())) END AS VARCHAR)
+'-'+
CAST([BeginMonth] as Varchar)
+'-'+
CAST([BeginDay] as Varchar)) as DATE) 
AND
CAST((CAST(case when CAST([EndMonth] as Varchar)> (select datepart(month,getdate())) 
THEN (select datepart(YEAR,getdate()))
when CAST([EndMonth] as Varchar)= (select datepart(month,getdate()))
AND CAST([EndDay] as Varchar)> (select datepart(month,getdate()))
THEN (select datepart(YEAR,getdate()))
when CAST([EndMonth] as Varchar)= (select datepart(month,getdate()))
AND CAST([EndDay] as Varchar)= (select datepart(month,getdate()))
THEN (select datepart(YEAR,getdate())+1)
when CAST([EndMonth] as Varchar)= (select datepart(month,getdate()))
AND CAST([EndDay] as Varchar)< (select datepart(month,getdate()))
THEN (select datepart(YEAR,getdate())+1) 
ELSE (select datepart(YEAR,getdate())) END AS VARCHAR)
+'-'+
CAST([EndMonth] as Varchar)
+'-'+
CAST([EndDay] as Varchar)) as DATE) 

SQL フィドル

今回もご満足いただければ幸いです。

Today'sDateを使用したくない場合で、日付がある場合は、 Datetime 値にPredefined置き換えGETDATE()てください。predefined

はいDatetime

于 2013-06-10T13:54:08.730 に答える