【问题标题】:How to use CONTAINS with CURDATE?如何使用包含 CURDATE 的内容?
【发布时间】:2019-03-22 11:47:38
【问题描述】:

我有一个包含以下值的表:

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())

但我明白了:

'CONTAINS YEAR (CURDATE ()) LIMIT 0, 25' line 1 附近的 SQL 查询中的语法错误

【问题讨论】:

    标签: mysql sql date


    【解决方案1】:

    您可以通过LIKE 使用以下解决方案:

    SELECT * FROM table_name WHERE name LIKE CONCAT('%', YEAR(CURDATE()), '%');
    

    使用INSTRLOCATE 的另一种解决方案:

    -- 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());
    

    demo on dbfiddle.uk

    注意: MySQL 上没有函数CONTAINS 可以在另一个字符串中搜索一个字符串。 CONTAINS is a keyword on MySQLcan be used for spatial data(早期的 MySQL 8.0 - 自 MySQL 5.7.6 起已弃用)。

    【讨论】:

    • 还有比CONTAINS更快的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 2014-09-25
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多