mysql - Regular expression for 1-50 without decimal point -
i looking regular expression match number 1 50 inclusive. far, have found examples allow string contain decimal point, not want include. 1,13,24,50 ok 1. ,etc not. there regexp can use?
thanks in advance, tim
try this:
/^(?:[1-9]|[1-4][0-9]|50)$/ update:
now see question has been updated refer mysql, changes things significantly. above-mentioned regular expression uses non-capturing parens not supported mysql. begs question; should using regular expressions solve problem? have @ how storing numbers must between 1 , 50. varchars? ints? i'll demonstrate how solve both ways. first i'll set test table indexes:
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; now put test data making sure our edge cases covered:
insert regextest (varchar_number, int_number) values ('0', 0), ('1', 1), ('35', 35), ('49', 49), ('50', 50), ('51', 51); and now, here query solve problem assuming numbers stored strings in varchar_number column:
mysql> select * regextest 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) this works perform poorly on large data sets because can't use index if 1 present. mysql must run regular expression once every row in table. suppose numbers between 1 , 50 stored ints in int_number column. this:
mysql> select * regextest int_number between 1 , 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) this query perform because can use index , it's more readable , more maintainable. wins around.
Comments
Post a Comment