我遇到了一个问题,我的列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以上....我怎样才能实现这一点......请帮助
答案 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,查询将是
select * from table where
colname rlike '[[:<:]]200[[:>:]]'