如何检查字符串mysql中的精确整数值
我遇到了一个问题,例如,我的列OFFER_DESCRIPTION包含带有Amount(整数)的字符串如何检查字符串mysql中的精确整数值,mysql,regex,sql-like,Mysql,Regex,Sql Like,我遇到了一个问题,例如,我的列OFFER_DESCRIPTION包含带有Amount(整数)的字符串 BUY ABOVE 200 BUY ABOVE 900 BUY ABOVE 300... 一个用户可以查询这样的东西…提供200…然后我运行一个类似这样的查询 从offertable中选择*,其中提供描述,如“%200%” 或 从offertable中选择OFFER_DESCRIPTION,其中OFFER_DESCRIPTION类似于'200' 如果只有200卢比的报价,它可以正常工作,但
BUY ABOVE 200
BUY ABOVE 900
BUY ABOVE 300...
一个用户可以查询这样的东西…提供200…然后我运行一个类似这样的查询
从offertable中选择*,其中提供描述,如“%200%”
或
从offertable中选择OFFER_DESCRIPTION,其中OFFER_DESCRIPTION类似于'200'
如果只有200卢比的报价,它可以正常工作,但是……在其他情况下……有不同的报价集,如
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
我只想提供确切金额为200
购买200以上……我如何才能做到这一点……如果模式相同,即金额在末尾并用空格分隔,请提供帮助,您可以使用
子字符串\u 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 |
+-------------------------------------------+
mysql>选择'BUY over 200'rlike'[[::]];
+-------------------------------------------+
|'购买200以上的'rlike'[[::]'|
+-------------------------------------------+
| 1 |
+-------------------------------------------+
一行一组(0.00秒)
mysql>选择'BUY over 2000'rlike'[[::]];
+--------------------------------------------+
|'购买2000以上'rlike'[[::]'|
+--------------------------------------------+
| 0 |
+--------------------------------------------+
一行一组(0.00秒)
mysql>选择“购买高于'rlike'[[::]]的300”;
+-------------------------------------------+
|'购买高于'rlike'[[::]]的300美元'|
+-------------------------------------------+
| 0 |
+-------------------------------------------+
一行一组(0.00秒)
mysql>选择“购买200以上的'rlike'[[::]]”;
+-------------------------------------------+
|'购买高于'rlike'[[::]]的200美元'|
+-------------------------------------------+
| 1 |
+-------------------------------------------+
所以,假设你有数据
- 在200以上购买
- 购买200以上或更多
- 200多买
- 2000年以上购买
- 购买300以上
select * from table where
colname rlike '[[:<:]]200[[:>:]]'
从表中选择*,其中
colname rlike“[[::]”
我们可以用更简单的方法来做
SELECT *
FROM TAB
WHERE CHARACTER_LENGTH (OREPLACE (STRTOK( word,' ',3) , '200' ,''))=0
试试这个:Regex模式:\b200\b你能给我们提供更多信息吗?你为什么要像一样使用
?为什么不为amount列使用整数数据类型?@Tomva它需要有char,否则如果我的列是整数,我就不会问这个问题了……在字符串中隐藏搜索的内容是错误的模式设计。200
应位于整数列中。如果你需要加上“买在上面”,然后通过SELECT CONCAT…
。运行两个查询…我认为这不是一个好主意…而且它没有相同的模式..在regexEXP中有什么方法可以做吗…?它不是两个查询第一个是一个示例,第二个是如何在SELECT中使用它。嘿@Abhik很抱歉,如果数量介于两者之间怎么办…描述如200以上,得到报价??)您的金额可以是字符串中的任何位置,并表示如果您正在寻找匹配的200,您将拥有rlike'[[::]]'
类似于select*的内容,从col_name rlike'[[:]]'
哇,这就是我要找的……您不能将其添加到您的答案中,以供未来用户使用:)