获取与regex模式sql匹配的列名


get column name matching regex pattern sql

我想在列名为foo32的表中获取所有列。数字32可以是任何数字。我有下面的查询,它工作得很好,除非它与不只包含数字的列匹配。

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name =  'table1'
AND table_schema =  'database1'
AND column_name LIKE 'foo%'

不幸的是,上述查询将匹配foo12abcfooCDE

我根据这个页面尝试了以下操作,但它返回了一个空结果,所以一定有什么东西没有命中

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 ...

我希望查询返回列foo1foo21foo19

使用foo[^0-9],您要查找的是foo,后面跟的是而不是0-9(字符类开头的^表示后面的否定。

如果您尝试foo[0-9],它应该会起作用(尽管它会捕获不以foo开头并且有额外后缀的东西)。

这应该是你正在寻找的:

^foo'd+$

翻译过来就是:

  • 表名开头的foo^
  • 后面跟着一个或多个数字,直到表名结束($