Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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
Sql 如何正则表达式匹配多个项_Sql_Regex_Database_Oracle - Fatal编程技术网

Sql 如何正则表达式匹配多个项

Sql 如何正则表达式匹配多个项,sql,regex,database,oracle,Sql,Regex,Database,Oracle,我有一个评论表,如下所示: 注册号 评论 1. 重量不能超过40公斤 2. 你不能使重量超过31公斤 3. 不要超过94公斤 4. 最佳重量为45公斤 5. 不要超过62公斤 6. 重量不能超过7000g 您可以从字符串中提取数字。只有一个,然后检查字符串是否与某些模式相似: select regexp_substr(comm, '[0-9]+') from reviews where regexp_like(comm, '(exceed|go over|above).*[0-9]+ ?(kg|

我有一个
评论
表,如下所示:

注册号 评论 1. 重量不能超过40公斤 2. 你不能使重量超过31公斤 3. 不要超过94公斤 4. 最佳重量为45公斤 5. 不要超过62公斤 6. 重量不能超过7000g
您可以从字符串中提取数字。只有一个,然后检查字符串是否与某些模式相似:

select regexp_substr(comm, '[0-9]+')
from reviews
where regexp_like(comm, '(exceed|go over|above).*[0-9]+ ?(kg|k.g)');

是一个dbfiddle。

您可以从字符串中提取数字。只有一个,然后检查字符串是否与某些模式相似:

select regexp_substr(comm, '[0-9]+')
from reviews
where regexp_like(comm, '(exceed|go over|above).*[0-9]+ ?(kg|k.g)');

是一个dbfiddle。

您可以使用更健壮的正则表达式来提取数字

我没有oracle DB,但请尝试以下操作:

SELECT
  r_id,
  REGEX_SUBSTR(comment, '([0-9]+) ?(k\.?g\.?|kilos)', 1, 1, 'i') as "max weight"
FROM reviews;
您可以在中看到此正则表达式与给定字符串匹配。这也解释了正则表达式的含义

我们还打开不区分大小写的标志,以便正确处理任何大小写

编辑:检查EXCEND、go over等。请注意,我们已将位置参数从1更改为2,因为我们现在关心第二个捕获组

SELECT
  r_id,
  REGEX_SUBSTR(comment, '(exceed|go over|above)\h*([0-9]+) ?(k\.?g\.?|kilos)', 1, 2, 'i') as "max weight"
FROM reviews;

您可以使用更健壮的正则表达式来提取数字

我没有oracle DB,但请尝试以下操作:

SELECT
  r_id,
  REGEX_SUBSTR(comment, '([0-9]+) ?(k\.?g\.?|kilos)', 1, 1, 'i') as "max weight"
FROM reviews;
您可以在中看到此正则表达式与给定字符串匹配。这也解释了正则表达式的含义

我们还打开不区分大小写的标志,以便正确处理任何大小写

编辑:检查EXCEND、go over等。请注意,我们已将位置参数从1更改为2,因为我们现在关心第二个捕获组

SELECT
  r_id,
  REGEX_SUBSTR(comment, '(exceed|go over|above)\h*([0-9]+) ?(k\.?g\.?|kilos)', 1, 2, 'i') as "max weight"
FROM reviews;

这种方法的问题是,如果句子是
,那么如果你的背部受伤,你就不应该超过重量,所以我想要的是
不应该超过
@ZoeyMalkov。您可以根据您的特定字符串对其进行调整。您必须自定义此项。这个版本适用于您提出的问题。我有一个关于您的解决方案的问题。您是如何匹配
r\u id
4
的。没有空间吗?它是
94公斤
@ZoeyMalkov。空间是可选的,因为
。这种方法的问题是,如果句子是
,那么如果你的背部受伤,你就不应该超过重量,所以我想要的是
不应该超过
@ZoeyMalkov。您可以根据您的特定字符串对其进行调整。您必须自定义此项。这个版本适用于您提出的问题。我有一个关于您的解决方案的问题。您是如何匹配
r\u id
4
的。没有空间吗?它是
94公斤
@ZoeyMalkov。空格是可选的,因为
。该空格在
r\u id
4
上匹配,这不应该匹配,因为我们还必须检查句子是否包含
不能超过
过去时等术语,
excel上文
在陈述千克数之前,在
r\u id
4
上匹配的千克数不应该匹配,因为在陈述千克数之前,我们还必须检查句子中是否有类似于
不能超过
过去时
excel上文
的术语