Sqlite VARCHAR上的内部联接编号范围查找

Sqlite VARCHAR上的内部联接编号范围查找,sqlite,Sqlite,所以我想知道SQLite是否能够理解数字范围 我希望能够有一个范围,如“25-30”,并查找“27”,看看它是否在该范围内。 问题是,该范围将包含一些文本,例如“Alice 25-30” 本链接的表3中给出了Id希望实现的一个示例: 对于能够在第一个数字处打破字符串,但仍然保持数字不变的解决方案,我们非常高兴 Alice|25-30 不是 Alice | 5-30(我以前见过这个建议:D) 要真正创建表3,我将使用内部联接或左外部联接,不仅重新创建表,而且速度更快 提前感谢。您可以通过如下方式

所以我想知道SQLite是否能够理解数字范围

我希望能够有一个范围,如“25-30”,并查找“27”,看看它是否在该范围内。 问题是,该范围将包含一些文本,例如“Alice 25-30”

本链接的表3中给出了Id希望实现的一个示例:

对于能够在第一个数字处打破字符串,但仍然保持数字不变的解决方案,我们非常高兴

Alice|25-30

不是

Alice | 5-30
(我以前见过这个建议:D)

要真正创建表3,我将使用内部联接或左外部联接,不仅重新创建表,而且速度更快


提前感谢。

您可以通过如下方式连接两个表:

INSERT INTO Table3 (`ID`, `Age`,'Age Range') 
SELECT t1.ID, t1.Age, t2.`Age Range`
FROM Table1 t1 INNER JOIN Table2 t2
ON t1.Age + 0 BETWEEN `Age Range` + 0 
                  AND SUBSTR(`Age Range`, INSTR(`Age Range`, '-') + 1) + 0
SQLite在使用诸如
+0
之类的数字运算的表达式中使用字符串时,会执行字符串到数字的隐式转换,因此查询所做的是将
Age
Age Range
的第一和第二部分进行数字比较。
请注意,t1上的
中不需要
+0
。如果将
Age
定义为
REAL
,这更有意义。
如果希望将
表1
中的行插入
表3
中,即使没有匹配的
年龄范围,也将
内部
连接更改为
左侧
连接

请参阅。
结果:

身份证件 年龄 年龄范围 1. 30 25-30 2. 40.5 31-45