我有一个包含以下字段的表:
themeID = int(11)
partnerID = int(11)
name = varchar(255)
BeginDate = date (Y-m-d)
EndDate = date (Y-m-d)
active = tinyint(1)
我想在01-30
之前选择具有BeginDate的主题,在01-30
之后选择EndDate。
我只想搜索当月和不这一年。
我使用以下查询,但我什么都没有回来(0行):
SELECT
DATE_FORMAT(BeginDate, '%m-%d'),
DATE_FORMAT(EndDate, '%m-%d')
FROM theme
WHERE DATE_FORMAT(BeginDate, '%m-%d') <= '01-30'
AND DATE_FORMAT(EndDate, '%m-%d') > '01-30'
ORDER BY BeginDate
我做错了什么?
PS。有记录从现在开始(01-30)到现在结束(01-30)
修改 表数据
Default ...... 2000-01-01 ... 2000-01-01
Oud en Nieuw . 2000-12-26 ... 2000-01-04
Pasen ........ 2000-03-28 ... 2000-04-04
Dierendag..... 2000-10-04 ... 2000-10-04
Sinterklaas .. 2000-11-20 ... 2000-12-05
Kerstmis ..... 2000-12-23 ... 2000-12-26
Winter ....... 2000-12-21 ... 2000-03-20
答案 0 :(得分:1)
这样的东西?
... WHERE (MONTH(BeginDate) <= 1 AND DAY(BeginDate) < 30)
AND (MONTH(EndDate) >= 1 AND DAY(EndDate) > 30)
答案 1 :(得分:1)
虽然可以对此进行优化,但这会将所有日期转换为同一年(2000年)并进行相应比较:
SELECT *
FROM (
SELECT themeID, name,
DATE_FORMAT(BeginDate, '%m-%d'),
DATE_FORMAT(EndDate, '%m-%d'),
DATE(BeginDate + INTERVAL (2000 - Extract(YEAR from BeginDate)) YEAR) NewBeginDate,
DATE(EndDate + INTERVAL (2000 - Extract(YEAR from EndDate)) YEAR) NewEndDate
FROM theme
) a
WHERE NewBeginDate <= DATE(Now() + INTERVAL (2000 - Extract(YEAR from Now())) YEAR)
AND NewEndDate > DATE(Now() + INTERVAL (2000 - Extract(YEAR from Now())) YEAR)
这是SQL Fiddle。
话虽如此,你的查询似乎对我来说很好。在上面的小提琴中尝试自己的查询。
祝你好运。