我正在尝试在一段时间内根据日期和月份同时条件在 2 列之间创建查询,如下所示:
这是 demo
信息如下:
CREATE TABLE clients
(date_birth date, [date_anniversary] date)
;
INSERT INTO clients
([date_birth], [date_anniversary])
VALUES
('1911-01-04',NULL ),('1921-01-05',NULL ),('1931-01-06',NULL ),('1941-01-07',NULL ),
('1951-01-08',NULL ),('1961-01-09',NULL ),('1971-01-10',NULL ),('1981-01-11',NULL ),
('1991-01-12',NULL ),(NULL, '1998-02-13'),(NULL, '1999-02-14'),(NULL, '2000-02-15'),
(NULL, '2001-02-16'),(NULL, '2002-02-17'),(NULL, '2003-02-18'),(NULL, '2004-02-19'),
(NULL, '2005-02-20'),(NULL, '2006-02-21');
条件是:
since "04-01" until "13-02"
show all from clients where date_birth BETWEEN "04-01" AND "13-02" OR date_anniversary "04-01" AND "13-02"
这应该是输出:
('1911-01-04',NULL ),
('1921-01-05',NULL ),
('1931-01-06',NULL ),
('1941-01-07',NULL ),
('1951-01-08',NULL ),
('1961-01-09',NULL ),
('1971-01-10',NULL ),
('1981-01-11',NULL ),
('1991-01-12',NULL ),
(NULL, '1998-02-13'),
我试过了,但只用了一个月:
select date_birth from clients
where month(date_birth) BETWEEN '00' AND '01'
也尝试过:
SET @date1 := 01-14;
SET @date2 := 02-20;
select date_birth from clients
where date_birth BETWEEN @date1 AND @date2
有人可以帮助我吗?
最佳答案
你可以使用Mysql的月和日函数来做到这一点
SELECT date_birth ,date_anniversary
FROM clients
WHERE
(
MONTH(date_birth) >= 01 AND MONTH(date_birth) <= 01
AND DAY(date_birth) >= 01 AND DAY(date_birth) <= 31
)
OR
(
MONTH(date_anniversary) >= 01 AND MONTH(date_anniversary) <= 01
AND DAY(date_anniversary) >= 01 AND DAY(date_anniversary) <= 31
)
使用 Mysql 的 date_format 函数只需按日和月格式化您的列就可以与提供的相同格式的范围进行比较,还可以按照这种 '%m-%d' 格式提供您的参数
select date_birth ,date_anniversary
from clients
where date_format(date_birth,'%m-%d') BETWEEN '01-01' AND '01-31'
or
date_format(date_anniversary,'%m-%d') BETWEEN '01-01' AND '01-31'
在变量中存储值
SET @start:='01-01';
SET @end:='01-31';
SELECT date_birth ,date_anniversary
FROM clients
WHERE DATE_FORMAT(date_birth,'%m-%d') BETWEEN @start AND @end
OR
DATE_FORMAT(date_anniversary,'%m-%d') BETWEEN @start AND @end
关于mysql - 如何按日期格式搜索列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25452487/