我想在列名为foo32
的表中获取所有列。数字32
可以是任何数字。我有下面的查询,它工作得很好,除非它与不只包含数字的列匹配。
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'table1'
AND table_schema = 'database1'
AND column_name LIKE 'foo%'
不幸的是,上述查询将匹配foo12abc
和fooCDE
。
我根据这个页面尝试了以下操作,但它返回了一个空结果,所以一定有什么东西没有命中
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'table1'
AND table_schema = 'database1'
AND column_name REGEXP 'foo[^0-9]'
示例表:
foo1 | foo21 | fooABC | foo123ABC | foo19 | col12
_________________________________________________
// data ...
我希望查询返回列foo1
、foo21
和foo19
使用foo[^0-9]
,您要查找的是foo
,后面跟的是而不是0-9
(字符类开头的^
表示后面的否定。
如果您尝试foo[0-9]
,它应该会起作用(尽管它会捕获不以foo
开头并且有额外后缀的东西)。
这应该是你正在寻找的:
^foo'd+$
翻译过来就是:
- 表名开头的
foo
(^
) - 后面跟着一个或多个数字,直到表名结束(
$
)