#mysql #sql #date
#mysql #sql #Дата
Вопрос:
У меня есть таблица, которая содержит следующие значения:
id | competition_id | season_id | name | update_at
1 5 512 2018/2019 2019-03-22 08:55:22
2 5 NULL Venezuela NULL
3 5 85 2017/2018 2019-02-15 08:55:22
4 5 NULL 90' NULL
5 5 72 2016/2017 NULL
Мне нужно вернуть все записи, в name
столбце которых указан текущий год, что я и сделал:
SELECT * FROM mytable WHERE name CONTAINS YEAR(CURDATE())
но я получаю:
Синтаксическая ошибка в SQL-запросе возле строки 1 «СОДЕРЖИТ YEAR (CURDATE ()) LIMIT 0, 25»
Ответ №1:
Вы можете использовать следующее решение с помощью LIKE
:
SELECT * FROM table_name WHERE name LIKE CONCAT('%', YEAR(CURDATE()), '%');
Другое решение, использующее INSTR
или LOCATE
:
-- using INSTR
SELECT * FROM table_name WHERE INSTR(name, YEAR(CURDATE())) > 0;
-- using LOCATE
SELECT * FROM table_name WHERE LOCATE(YEAR(CURDATE()), name) > 0;
Вы также можете использовать следующее решение, используя REGEXP
:
SELECT * FROM table_name WHERE name REGEXP YEAR(CURDATE());
Примечание: В MySQL нет функции
CONTAINS
для поиска строки в другой строке.CONTAINS
является ключевым словом в MySQL и может использоваться для пространственных данных (более ранний MySQL 8.0 — не рекомендуется с MySQL 5.7.6).
Комментарии:
1. есть более быстрые, чем
CONTAINS
?