【问题标题】:How to check if input string is in between two sets of strings in MySQL?如何检查输入字符串是否在 MySQL 中的两组字符串之间?
【发布时间】:2017-09-08 17:16:14
【问题描述】:

我在 MySQL 中有一个类似于以下的表:

    [id]  [from]    [to]         [input]
    1     AC1.G72   AZ999.M6     AB45.632
    2     B72.F4    B131.D3V.5   B80.F5
    3     B131.E2   B243.G66     B232.G3

我想要做的是检查 [input] 是否在 [from] 和 [to] 之间。所以对于 id=1,它会返回 false,因为 AB45.632 不在 AC1.G72-AZ999.M6 之间,而对于 id=2 和 id=3,它会返回 true。是否可以在 MySQL 中进行这样的检查?如果是这样,最有效的查询是什么? PHP中是否还有一个函数可以检查一个字符串是否在两个字符串的范围内?

【问题讨论】:

  • 不,您无法在两者之间进行检查,因为它们是 varchar
  • 基于上表,我刚刚运行了一个查询“SELECT from FROM table WHERE from BETWEEN 'A' and 'AD'”它成功返回给我AC1.G72,为什么不能用于 varchar 之间?
  • 你知道字母顺序是什么吗?我建议你检查 id=2
  • 我不知道你的意思。如果我查看 id=2,B80 介于 B72 和 B131 之间,不是吗?我正在编写一个代码来分隔“。”之前和之后的字符串。我只是问是否有一个查询可以区分某个字符串是否在另外两个字符串之间。在我的问题中措辞不佳并举出如此复杂的例子是我的错。我应该问我是否可以检查“AC”是否在“AA”和“AE”之间。无论如何,下面的答案能够实现我现在所需要的。为什么不赞成询问是否可以在 MySQL 中做某事?
  • 没有。 80(数字)在 72 和 131 之间,但“80”(文本)不在“72”和“131”之间,因为按字母顺序,“1”在“8”之前,因此“131”在“80”之前。运行这个:select 80 between 72 and 131 as_number,'80' between '72' and '131' as_text。所以不行。下面的答案没有按照您的要求为 id=2 返回 true。运行这个:select 'B80.F5' between 'B72.F4' and 'B131.D3V.5' for_id_2.直到现在还不清楚你如何比较列。只有第一个标记的数字部分?不同的前缀(除“B”外)是否会影响比较?如果第一个令牌相等怎么办?

标签: php mysql sql regex database


【解决方案1】:

我不确定您所说的“介于”是什么意思,但是 SQL 运算符 between 在所有数据库中的字符串列上都可以正常工作。

所以,你可以这样做:

select t.*
from t
where 'AB45.632' not between `from` and `to`;

这会根据列、表、数据库和服务器连接的排序规则进行严格的字母比较。

【讨论】:

  • 我使用的是 MySQL,所以查询有点不同,但这个运算符实际上工作得很好。谢谢!
猜你喜欢
  • 2022-01-10
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多