【问题标题】:MySQL select from text column with specificationMySQL 从具有规范的文本列中选择
【发布时间】:2018-11-08 08:30:42
【问题描述】:

我想查询一个 MySQL 5 的数据库。

假设数据库名称为db,表名称为table,列名称为column

那一栏是text

例如包含以下内容:

aksksksksjsjk&ct=100&lor=10
aksksksksjsjk&ct=1001001001001001&lor=10

所以我想查询该表并仅在 ct 以数字 1 开头并且它是 16 数字的地方进行 grep。

我试过SELECT column FROM db.table WHERE column LIKE '%ct=1%'

所以它会在 ct 以数字 1 开头的地方 grep

所以请尝试帮助我继续选择 ct,以数字 1 开头并包含 16 numbers

【问题讨论】:

    标签: mysql sql regex


    【解决方案1】:

    在其基本形式中,您可能希望使用

    SELECT column FROM db.table WHERE column REGEXP BINARY 'ct=1[0-9]{15}'
    

    或者,作为一个完整的单词匹配:

    SELECT column FROM db.table WHERE column REGEXP BINARY '[[:<:]]ct=1[0-9]{15}[[:>:]]'
    

    请注意,[0-9]{15} 匹配 15 位数字。

    BINARY 关键字将使匹配区分大小写,因此只有 ct 会被匹配,CT 不会。如果您需要保持正则表达式不区分大小写,请将其删除。

    [[:&lt;:]] 匹配左侧(起始)单词边界,[[:&gt;:]] 匹配尾部(结束)单词边界。

    【讨论】:

    • 非常感谢。这是工作。介意我问你另一个问题吗?如果相同的文本包含exp=0918,那么有没有办法选择大于0918exp
    • @DoumerIssac 那是complex topic。但是,使用the number range generator,您可以尝试0*(919|9[2-9][0-9]|[1-9][0-9]{3,})
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多