【问题标题】:get column name matching regex pattern sql获取与正则表达式模式 sql 匹配的列名
【发布时间】:2016-07-18 05:08:30
【问题描述】:

我想获取列名称为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

【问题讨论】:

    标签: php sql regex pdo


    【解决方案1】:

    通过使用foo[^0-9],您正在寻找foo,后跟任何 0-9(字符类开头的^ 表示对后面内容的否定。

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

    这应该是你要找的:

    ^foo\d+$
    

    意思是:

    • foo 紧跟在表名的开头 (^)
    • 后跟多个数字之一,直到表名结束 ($)

    【讨论】:

    • 谢谢。 foo[0-9] 有效,但就像您说的那样,它还可以提取在数字后也有字母的结果。 ^foo\d+$ 返回空结果?
    • 它不应该返回空结果,而是尝试不使用^$ 看看结果是什么样的(基本上:foo\d+)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 2014-07-14
    相关资源
    最近更新 更多