Select ___where __LIKE ___

Select ___where __LIKE ___

我想 select 数据库中所有不包含字符 _ 的表,为此我使用了请求:

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE table_schema="DB_NAME"
AND TABLE_NAME NOT LIKE '%_%'; 

但是好像不行

下划线 (_) 是 SQL 的 LIKE 运算符中的单字符通配符。如果您想将其视为常规字符,则必须明确 escape it:

SELECT TABLE_NAME 
FROM   INFORMATION_SCHEMA.TABLES 
WHERE  table_schema='DB_NAME' and TABLE_NAME NOT LIKE '%\_%' ESCAPE `\`;

您可以尝试使用 mysql 中的 REGEXP 到 select 每个不包含 _ 的表格。

SELECT TABLE_NAME 
FROM   INFORMATION_SCHEMA.TABLES 
WHERE  table_schema='DB_NAME' and TABLE_NAME REGEXP '^[^_]+$';

简答

TABLE_NAME NOT LIKE '%\_%'

长答案

字符%_LIKE表达式中都是特殊字符。

Documentation

  • % 匹配零个或多个字符。
  • _ 正好匹配一个字符。

如果你想在你的查询中使用它,你必须使用转义字符。默认为 \.

  • \% Mach '%' 字符。
  • \_ Mach '_' 字符。

在你的情况下会是:

TABLE_NAME NOT LIKE '%\_%'

可以定义不同的转义字符,例如|

TABLE_NAME NOT LIKE '%|_%' ESCAPE '|'