【发布时间】: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