我試過很多方法從文本字段中只選擇以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