Как использовать CONTAINS с CURDATE? - PullRequest
2 голосов
/ 22 марта 2019

У меня есть таблица, которая содержит следующие значения:

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-запросе около 'CONTAINS YEAR (CURDATE ()) LIMIT 0, 25', строка 1

1 Ответ

2 голосов
/ 22 марта 2019

Вы можете использовать следующее решение, используя 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());

демо на dbfiddle.uk

Примечание: В MySQL нет функции CONTAINS для поиска строки в другой строке. CONTAINS является ключевым словом в MySQL , а может использоваться для пространственных данных (ранее MySQL 8.0 - не рекомендуется с MySQL 5.7.6).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...