是否可以在MySQL中执行以下操作
SELECT * FROM'表名'WHERE'字段名称'NOT LIKE'%string%';
我正在研究之前由其他人设置的数据库 - 根据位置有很多针对鞋码的字段标题 - 即quantity_size_125_grantham
我想运行一个查询,它将从数据库中选择所有列和行,其中字段标题名称不是'%grantham%'。 quantity_size_ integer _ * location *有多列我想排除。
这可能吗?
谢谢,
答案 0 :(得分:0)
不,动态创建SQL语句并在单个语句中执行它是不可能的。它可以分两步完成。
可以从information_schema
中的columns
数据库中检索列元数据,例如:
SELECT c.*
FROM information_schema.columns c
WHERE c.column_name NOT LIKE '%string%'
AND c.table_schema = 'mydatabase'
AND c.table_name = 'mytable'
ORDER BY c.table_name, c.ordinal_position
由于MySQL语句必须定义要返回的列,因此无法在查询中动态包含/排除列。
您可以使用information_schema
数据库来帮助您创建一个SQL语句,例如:
SELECT CONCAT('SELECT '
,GROUP_CONCAT(CONCAT('t.`',c.column_name,'`') ORDER BY c.ordinal_position)
,' FROM `',c.table_name,'` t'
) AS stmt
FROM information_schema.columns c
WHERE c.table_schema = 'mydatabase'
AND c.table_name = 'mytable'
AND c.column_name NOT LIKE '%string%'
GROUP BY c.table_name
注意: GROUP_CONCAT
函数返回的字符串长度受group_concat_max_len
和max_allowed_packet
变量的限制。
此查询仅返回一个字符串;它实际上并不执行生成的语句。这需要作为一个单独的步骤来完成。
<击> 是的,这是可能的。但是不要在标识符周围使用单引号。
如果你需要“引用”标识符,那么MySQL标准就是使用它们的反引号。 (如果SQL_MODE
包含ANSI_QUOTES
)
此:
SELECT t.*
FROM `table_name` t
WHERE t.`field_name` NOT LIKE '%string%'
将返回表中field_name
列中的值未设置为NULL且值不包含字符串string
的所有行。
击>