Sql 查找仅包含多位数整数前几部分的两列之间的匹配

Sql 查找仅包含多位数整数前几部分的两列之间的匹配,sql,sqlite,Sql,Sqlite,我正在从python3中执行搜索功能,该功能查看sqllite3数据库。 我有一个名为“numberseries”的表,它有不同的列。 有些列是“customername”、“number\u from”、“number\u to”、“total” “数字\从”和“数字\到”字段包含一系列数字的起点和终点 例如: “客户XYX”的编号范围为80201110到80201129。 这两个数字分别输入“数字从”和“数字到”。 “总计”列将包含条目之间的数字差异。在这种情况下是20 我做了一个简单的查询

我正在从python3中执行搜索功能,该功能查看sqllite3数据库。 我有一个名为“numberseries”的表,它有不同的列。 有些列是“customername”、“number\u from”、“number\u to”、“total”

“数字\从”和“数字\到”字段包含一系列数字的起点和终点

例如: “客户XYX”的编号范围为80201110到80201129。 这两个数字分别输入“数字从”和“数字到”。 “总计”列将包含条目之间的数字差异。在这种情况下是20

我做了一个简单的查询,返回基于以下内容的行:

"Select * from numberseries where :value BETWEEN numbers_from and numbers_to;"
如果是一个完整的8位数,它就可以正常工作

然而:

用户需要一个返回相同数据的函数,但如果他们只输入数字的前5位,也需要该函数

例如,如果输入80201,则应返回“number_from”和“number_to”范围内包含80201作为前5位数字的所有行

仅仅用like语句查看“number_from”列是不够的,因为“total”可能是1000多个数字

我希望这是有道理的。 我绝不是一个sql专家,我在这个问题上遇到了困难

更新: 我收到一个澄清的请求

示例数据是一个带有行数的表。为简单起见,它只有以下列:

  • 身份证
  • 客户名称
  • 来自
  • 数字(u至)
  • 总数
样本客户可以是:

1, "the best customer", 80201110, 80201149, 40

输入可以是:8020113(缺少最后一个数字),我仍然需要匹配示例行,因为8020113x在80201110和80201149之间。

假设数据中的数字总是8个字符,那么您可以将其视为字符串,添加一组零并转换回数字:

where cast(substr(value || '00000000', 1, 8) as int) BETWEEN numbers_from and numbers_to;

根据你对另一个答案的最后评论,你真正想要的是:

select * from numberseries 
where :value in (
  substr(numbers_from, 1, length(:value)), 
  substr(numbers_to, 1, length(:value))
)
或:


将整数值转换为字符。发布示例数据和预期结果以进行澄清。我在原始帖子中添加了额外的澄清。这样效果更好,但仍会遗漏某些行。例如,它不会返回一个数字从=80101500到=80101599的记录,输入值是前5位数字。我详细介绍了你的记录,所以它可以工作:从数字序列中选择*其中数字从中间转换(substr('8010'| |'00000000',1,8)和转换(substr('8010'| |'999999',1,8)作为int)或数字从中间转换(substr('8010'| |'00000000',1,8)作为int)和cast(substr('8010'| |'9999999',1,8)作为int);它仍然没有捕捉到输入值介于两者之间的值,但没有精确匹配。例如,在XX4xxx和XX6xxx范围内的XXXX5,下面的修改似乎更好:从数字系列中选择*,其中:substr之间的值(numbers_-from,1,length(:value))和substr(numbers_-to,1,length(:value))@BLC检查我的第二个查询。
select * from numberseries 
where :value BETWEEN substr(numbers_from, 1, length(:value)) and numbers_to || ''