Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查字符串mysql中的精确整数值_Mysql_Regex_Sql Like - Fatal编程技术网

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

如何检查字符串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卢比的报价,它可以正常工作,但

我遇到了一个问题,例如,我的列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 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以上
如果要选择仅匹配200,则查询将为

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'[[:]]'
哇,这就是我要找的……您不能将其添加到您的答案中,以供未来用户使用:)