在SQL中,如何使用LIKE匹配最多但不超过通配符的数量?

时间:2018-08-28 23:39:52

标签: sql sqlite

例如在正则表达式中,我们可以使用{n,m}来指定我们要与前一个元素至少匹配n次,但不超过m次。

在SQL(特别是sqlite)中是否可以通过将通配符'_匹配最多5次但没有更多的方式来做到这一点?

例如我想在字母j和z之间最多5个字符

所以我会得到Jaz或Jaaaaaz,但不会得到Jaaaaaaz

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以将regexp模块添加到SQLite中。那可能是解决您问题的最佳方法。

您可以按照自己的意愿做:

where col not like '______'  -- 6 underscores

或更简单地说:

when length(col) < 6

那是您问题的直接答案。

编辑:

最多可以输入五个字符:

where col like 'j%z' and
      col not like 'j______z'

或者使用更野蛮的力量:

where col like 'jz' or
      col like 'j_z' or
      col like 'j__z' or
      col like 'j___z' or
      col like 'j____z' or
      col like 'j_____z' 

如果要在字符串(而不是整个字符串)中使用这些模式,请在模式的开头和结尾添加%

答案 1 :(得分:1)

要回答您的特定问题,您可以使用

WHERE col LIKE 'J%z' AND LENGTH(col) < 8

例如

SELECT 'Jaaaz' LIKE 'J%z' AND LENGTH('Jaaaz') < 8, 'Jaaaaaaz' LIKE 'J%z' AND LENGTH('Jaaaaaaz') < 8

输出

1    0