【问题标题】:how to fetch range of values using LIKE operator in oracle?如何在 oracle 中使用 LIKE 运算符获取值范围?
【发布时间】:2020-07-14 06:21:55
【问题描述】:

我的数据库我想使用 LIKE 运算符选择具有 A15-A19 但无法获得所需结果的数据。 我编写的代码为SELECT * FROM MASTER_RULE WHERE VALUE BETWEEN LIKE 'A15%' AND 'A19%',还尝试了正则表达式为SELECT * FROM MASTER_RULE WHERE REGEXP_LIKE(value, 'A[1-9]') 。但是正则表达式给出了所有未指定范围 15-19 的记录。

如何解决这个问题?

【问题讨论】:

  • 你能给我们举个你专栏数据的例子吗?它们只是像 A15、A16、A07... 吗?
  • 数据显示为 A15,A16,...A50。
  • 另外你的第一个查询不正确,它会抛出一个错误。
  • 请显示样本数据和期望的结果。 A15xyz 之类的值是否应符合条件?
  • 那么A153呢?

标签: sql regex oracle sql-like


【解决方案1】:

您的第一个查询不正确,它有一个您不需要的额外关键字。

这是 regexp_like 的解决方案:

SELECT * FROM MASTER_RULE WHERE REGEXP_LIKE(value, '^A[1][5-9]')

Here is a demo


更新:

这是“之间的解决方案”:

SELECT * 
FROM MASTER_RULE 
WHERE substr(value, 2,length(value)-1) between 15 AND 19

【讨论】:

  • REGP_EXP 给出了准确的结果,但 BETWEEN 运算符查询都没有给出所需的结果。无论如何感谢 buddy@VBoka
  • @Nvr 欢迎您。乐意效劳。请你能给我更多细节为什么之间不起作用?它返回什么数据?
  • BETWEEN 不做模式匹配,你不应该在字符串中有%
  • 正则表达式的开头应该有^ 来锚定它。否则它将匹配blahA15
  • @Barmar 我同意,我将删除我的前两个查询
【解决方案2】:

您可以只使用常规字符串比较:

where value >= 'A15' and
      value < 'A20'

这不仅简单,而且代码还可以利用value 上的索引。

【讨论】:

    【解决方案3】:

    正如您在 cmets 中提到的,您的数据类似于 A15、A16、A17。等等,您也可以通过简单的 in 子句来满足您的要求。

    SELECT * FROM MASTER_RULE WHERE VALUE in ('A15','A16','A17','A18,'A19');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      相关资源
      最近更新 更多