我试过很多方法从文本字段中只选择以89开头的数字。在前两个数字后没有固定长度。如何从MYSQL文本字段中选择仅使用REGEXP键入以89开头的数字?
例如,我如何才能正常工作,并且不会在结果中获得像389xxxxxx这样的数字。最小长度应至少为8个字符。
谢谢!
我试过很多方法从文本字段中只选择以89开头的数字。在前两个数字后没有固定长度。如何从MYSQL文本字段中选择仅使用REGEXP键入以89开头的数字?
例如,我如何才能正常工作,并且不会在结果中获得像389xxxxxx这样的数字。最小长度应至少为8个字符。
谢谢!
SELECT * FROM mytable WHERE mycolumn REGEXP "(^|[^[:digit:]])89[[:digit:]]{6,}";
会做到这一点:
( # Either match
^ # the start of the string
| # or
[^[:digit:]] # any character except a digit
) # End of alternation.
89 # Match 89
[[:digit:]]{6,} # plus at least 6 more digits.
如果你的列是整数,那么你也许可以这样做:
select * from my_table where cast(int_column) as char) like '89______%'
(这是6个下划线的百分比字符前)
如果是字符值,那么你可以这样做:
SELECT * FROM mytable WHERE char_column REGEXP "^89[[:digit:]]{6,}$"
如果列是数字与小数和你只想要整数值,那么你需要做的是这样
SELECT * FROM mytable WHERE cast(numeric_column as char) REGEXP "^89[[:digit:]]{6,}$"
编辑:看来蒂姆已经编辑他的回答,我所提到的所以我编辑了我的答案,以包含他的字符类型列的代码。
SELECT * FROM foo WHERE bar REGEXP "([^0-9]89[0-9]*)|(^89[0-9]*)"
这很好,但我只需要长度大于4或5个字符的数字,谢谢您的回复。 – 2012-02-13 19:49:26
嗯,它不工作,它返回0行。 – 2012-02-13 19:41:52
那么这个数字不是该列的唯一内容? – 2012-02-13 20:45:06
@CosminPanait:我修改了正则表达式。它现在应该符合你的要求。 – 2012-02-13 20:55:21