【问题标题】:Mysql "like" returning unexpected results [duplicate]Mysql“喜欢”返回意外结果[重复]
【发布时间】:2020-04-24 16:29:43
【问题描述】:

我正在创建一个 MySQL 查询来获取仅包含指定字符串的所有表的大小。

我正在使用下面的代码:

SELECT
TABLE_NAME AS `Table`,
(((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024)) AS `Size (MB)`
FROM information_schema.TABLES
WHERE TABLE_SCHEMA ='Servername' AND
(TABLE_NAME LIKE '%log_%' OR TABLE_NAME LIKE '%_log%')
GROUP BY  TABLE_SCHEMA
ORDER BY TABLE_SCHEMA;

Expected Output
--------------------
Table     Size (MB)
--------------------
login_log 10.0005
log_login 00.8800

Resulting Output
--------------------
Table     Size (MB)
--------------------
login_log 10.0005
login     05.000
log_login 00.8800

在上面的结果中,login table 不是必需的,但 MySQL 正在返回它。如何避免这种情况以仅获取包含指定字符串的那些表?

【问题讨论】:

  • 您的下划线_ 也可用作通配符,表示任何字符。

标签: mysql sql wildcard


【解决方案1】:

您的下划线_ 也可用作通配符,表示任何字符。

您可以通过在 SQL 语句中转义下划线来修复它,使用反斜杠字符 \

(TABLE_NAME LIKE '%log\_%' OR TABLE_NAME LIKE '%\_log%')

【讨论】:

    【解决方案2】:

    您可以使用类似于以下查询的内容:

    SELECT
    TABLE_NAME AS `Table`,
    (((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024)) AS `Size (MB)`
    FROM information_schema.TABLES
    WHERE TABLE_SCHEMA ='Servername' AND
    (TABLE_NAME LIKE '%\_log' OR TABLE_NAME LIKE 'log\_%')
    GROUP BY  TABLE_SCHEMA
    ORDER BY TABLE_SCHEMA;
    

    输出如下:

    Table     Size (MB)
    --------------------
    login_log 10.0005
    log_login 00.8800
    

    【讨论】:

    • 不仅login表还有很多表,所以很难找到[_log or log_]@Michele La Ferla之间的所有表
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2021-01-27
    • 2020-04-06
    • 2013-01-04
    • 2017-11-14
    相关资源
    最近更新 更多