如何检查字符串mysql中的确切整数值

时间:2015-05-08 08:32:40

标签: mysql regex sql-like

我遇到了一个问题,我的列OFFER_DESCRIPTION包含带有Amount(Integer)的String ....例如

BUY ABOVE 200

BUY ABOVE 900

BUY ABOVE 300...

用户可以查询类似这样的内容...... 200的优惠...然后我正在运行类似这样的查询......

从offfertable中选择*,其中OFFER_DESCRIPTION如'%200%';

OR

SELECT OFFER_DESCRIPTION FROM offertable WHERE OFFER_DESCRIPTION RLIKE'200';

如果只有RS.200 OFFER它可以正常工作但是......在其他场景......其中有不同的优惠套装....

BUY ABOVE 200

BUY ABOVE 1200 //NEW ONE

BUY ABOVE 2000 //NEW ONE

BUY ABOVE 900

BUY ABOVE 300...

因此,如果执行以上查询....它将返回3结果...

BUY ABOVE 200

BUY ABOVE 1200 //NEW ONE

BUY ABOVE 2000 //NEW ONE

我只想要提供EXACT AMOUNT为200的地方......

买200以上....我怎样才能实现这一点......请帮助

1 个答案:

答案 0 :(得分:1)

如果模式相同,即金额在末尾并用空格分隔,您可以使用substring_index函数

mysql> select substring_index('BUY ABOVE 200',' ',-1) as amount;
+--------+
| amount |
+--------+
| 200    |
+--------+
1 row in set (0.00 sec)

所以你可以做查询

select * from table where 
substring_index(col_name,' ',-1) = '200'

您也可以使用rlike进行匹配

mysql> select 'BUY ABOVE 200' rlike '[[:<:]]200[[:>:]]';
+-------------------------------------------+
| 'BUY ABOVE 200' rlike '[[:<:]]200[[:>:]]' |
+-------------------------------------------+
|                                         1 |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> select 'BUY ABOVE 2000' rlike '[[:<:]]200[[:>:]]';
+--------------------------------------------+
| 'BUY ABOVE 2000' rlike '[[:<:]]200[[:>:]]' |
+--------------------------------------------+
|                                          0 |
+--------------------------------------------+
1 row in set (0.00 sec)

mysql> select 'BUY 300 ABOVE' rlike '[[:<:]]200[[:>:]]';
+-------------------------------------------+
| 'BUY 300 ABOVE' rlike '[[:<:]]200[[:>:]]' |
+-------------------------------------------+
|                                         0 |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> select 'BUY 200 ABOVE' rlike '[[:<:]]200[[:>:]]';
+-------------------------------------------+
| 'BUY 200 ABOVE' rlike '[[:<:]]200[[:>:]]' |
+-------------------------------------------+
|                                         1 |
+-------------------------------------------+

所以说你有数据

  • 购买200以上
  • 购买200以上
  • 200以上购买
  • 购买2000以上
  • 购买300以上

并且您想选择仅匹配200,查询将是

select * from table where
colname rlike '[[:<:]]200[[:>:]]'