3

データベースに、月 (1-12) と年 (yyyy) の 2 つの列を持つテーブルがあります。

たとえば、2 つの日付の間のレコードを選択する必要があります。

select * from Calendar a where SOMEDATE between STARTDATE and ENDDATE.

問題は、この 2 つの列から STARTDATE と ENDDATE を作成するにはどうすればよいかということです。

4

2 に答える 2

1
...where SOMEDATE between 
STR_TO_DATE(CONCAT_WS('-',STARTYEAR,STARTMONTH,1),'%Y-%m-%d')
and
DATE_SUB(
    STR_TO_DATE(CONCAT_WS('-',ENDYEAR,ENDMONTH + 1,1),'%Y-%m-%d')
    , INTERVAL DAY 1
)

関連する月に何日あるかわからないため、両方の部分を日付型に変換し、 からdate_sub1 日を減算するために使用することに注意してください。ENDMONTH + 1

于 2012-09-20T10:30:10.037 に答える
0

このソリューションを使用して、yearおよびmonthフィールドから日付を作成できます-

SELECT MAKEDATE(year, 1) + INTERVAL month - 1 MONTH FROM calendar;

これを WHERE 条件に適用します。

SELECT * FROM Calendar a
WHERE
  MAKEDATE(year, 1) + INTERVAL month - 1 MONTH BETWEEN
    @STARDATE - INTERVAL EXTRACT(DAY FROM @STARDATE) - 1 DAY
    AND
    @ENDDATE

しかし、STARTDATE と ENDDATE の基準についてお尋ねします。STARTDATE が '2012-09-20' の場合はどうすればよいですか? クエリは月 = 9 のレコードを返す必要がありますか?

于 2012-09-20T10:20:20.420 に答える