Я пытаюсь вернуть запись, содержащую год даты, позвольте мне объяснить лучше, это мой запрос:
$query = "SELECT coach.*
FROM coach_career coach_cr
LEFT JOIN coach coach ON coach.id = coach_cr.coach_id
LEFT JOIN competition_seasons s ON s.id = :season_id
WHERE coach_cr.team_id = 95 AND 'start' LIKE '%2017/2018%'";
Мне нужно выбрать все поля coach
на coach_career
, coach
может тренировать другую команду в разные seasons
, поэтому мне нужно взять тренера, у которого есть время season.name
значение 2017/2018
, но дата start
имеет формат datetime, такой как: 2017-01-01
Как я могу справиться с этой ситуацией?
Пример данных
тренер:
id | name | last_name
1 foo test
coach_career:
coach_id | team_id | start | end
1 95 2017-01-01 NULL
competition_seasons
id | name |
1 2017/2018
Извините, мой ответ был для SQL Server. Вот исправленная версия:
create table coach(id integer, name char(100));
insert into coach(id, name) values(1, 'Jack'), (2, 'Peter');
create table coach_career (coach_id integer, season_id integer, start date, end date);
insert into coach_career values (1, 95, '20170101', null), (2, 95, '20010101', null);
create table competition_seasons (id integer, name char(100));
insert into competition_seasons values (95, '2017/2018');
SELECT coach.*
FROM coach_career cc
LEFT JOIN coach ON coach.id = cc.coach_id
LEFT JOIN competition_seasons s ON s.id = cc.season_id
WHERE cc.season_id = 95
AND '2017/2018' like concat('%', cast(extract(year from cc.start) as char(100)), '%');
Jack
Вы можете использовать ключевое слово BETWEEN
.
$query = "SELECT coach.*
FROM coach_career coach_cr
LEFT JOIN coach coach ON coach.id = coach_cr.coach_id
LEFT JOIN competition_seasons s ON s.id = :season_id
WHERE coach_cr.team_id = 95 AND 'start' BETWEEN '2017-01-01' and '2018-12-31'";
s.name
равно 2017/2018%
как я написал в запросе, поэтому вместо 2017/2018%
считают, что это s.name, я не могу использовать между ..
Попробуй это
$query = "SELECT coach.*
FROM coach_career coach_cr
LEFT JOIN coach coach
ON coach.id = coach_cr.coach_id
LEFT JOIN competition_seasons s
ON s.id = :season_id
WHERE coach_cr.team_id = 95
AND 'start' LIKE '%2017%'
OR LIKE '%2018%'";