mysql 正则去小数位_mysql – 1-50的正则表达式,不带小数点

试试这个:

/^(?:[1-9]|[1-4][0-9]|50)$/

更新:

现在我看到问题已经更新以引用MySQL,这会显着改变.上述正则表达式使用MySQL不支持的非捕获parens.但它也引出了一个问题;你真的应该使用正则表达式来解决这个问题吗?我们真的要看看你如何存储必须在1到50之间的数字.它们是varchars吗?他们是彗星吗?我将演示如何以两种方式解决它.首先,我将建立一个带索引的测试表:

create table regextest (

id int unsigned primary key auto_increment,

varchar_number varchar(5) not null,

int_number int not null,

index(varchar_number),

index(int_number)

) engine=innodb;

现在将一些测试数据放入其中,确保涵盖所有边缘情况:

insert into regextest (varchar_number, int_number)

values ('0', 0), ('1', 1), ('35', 35), ('49', 49), ('50', 50), ('51', 51);

现在,这是一个解决您的问题的查询,假设您的数字在varchar_number列中存储为字符串:

mysql> select * from regextest where varchar_number rlike '^([1-9]|[1-4][0-9]|50)$';

+----+----------------+------------+

| id | varchar_number | int_number |

+----+----------------+------------+

| 2 | 1 | 1 |

| 3 | 35 | 35 |

| 4 | 49 | 49 |

| 5 | 50 | 50 |

+----+----------------+------------+

4 rows in set (0.00 sec)

这可以工作,但它在大型数据集上表现不佳,因为即使存在索引也无法使用索引. MySQL必须为表中的每一行运行一次正则表达式.假设1到50之间的数字作为整数存储在int_number列中.你可以这样做:

mysql> select * from regextest where int_number between 1 and 50;

+----+----------------+------------+

| id | varchar_number | int_number |

+----+----------------+------------+

| 2 | 1 | 1 |

| 3 | 35 | 35 |

| 4 | 49 | 49 |

| 5 | 50 | 50 |

+----+----------------+------------+

4 rows in set (0.00 sec)

此查询将表现良好,因为它可以使用索引,它也更易读,更易于维护.四处奔走.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值