【问题标题】:MySQL range selection with wildcards使用通配符的 MySQL 范围选择
【发布时间】:2023-04-03 22:15:01
【问题描述】:

是否可以根据字符串的一些第一个字符选择数据库条目,与 MySQL 列中的“范围”匹配?

我将尝试通过一个示例来更清楚地说明这一点: 我需要通过匹配邮政编码来选择一个数据库条目,但我们从另一个系统的“范围”中检索了邮政编码,例如 100-128。邮政编码 10001(纽约)需要与此条目匹配。邮政编码的前 3 位数字需要与 100 或 128 或介于 (101, 102, ... 126, 127) 之间的任何数字匹配。

所以,数据库条目都是 050-051、144-146、245-253 等,我需要匹配完整的邮政编码。

是否有可能通过查询选择此条目?

感谢任何帮助!

编辑: 我会尽量说得更清楚:

我只有一个用户输入的邮政编码,例如 10001 (NY)。

现在我想检索我的运输信息表中与范围 (100-128) 匹配的所有条目。

用户邮编:07200,检索范围为:064-089的条目

用户邮编:33101,检索范围为:330-334的条目

等等。

我的运输信息表包含以下列:

ID、country_id、zip_range、价格

【问题讨论】:

  • MySql Regex 怎么样?例如。 ...WHERE my_col RLIKE '^1([01][0-9]|2[0-8])'
  • 如何自动将100-128 之类的字符串转换为该正则表达式?你将如何在 SQL 中做到这一点?

标签: mysql regex range wildcard


【解决方案1】:

使用SUBSTRING_INDEX 将范围分成开头和结尾。然后将前三个字符在该范围内的邮政编码与BETWEEN 匹配。

SELECT *
FROM shippingInfo
WHERE LEFT(:zipcode, 3) BETWEEN SUBSTRING_INDEX(ziprange, '-', 1) AND SUBSTRING_INDEX(ziprange, '-', -1);

:zipcode 是一个占位符,用于获取用户输入的邮政编码。

【讨论】:

  • 这个答案很接近,但不完全是我想要的。我实际上并没有加入任何表格,我只有一张包含我的运输信息的表格(包含 ziprange、价格、国家等列)。我似乎无法让它工作..
  • 您匹配的完整邮政编码在哪里?我认为您需要使用更多详细信息更新您的问题。显示表格示例,以及您想要得到的结果。
  • 我认为,一旦您看到我在 join 中使用的功能,这个答案应该是显而易见的。它完全一样,只是它匹配输入而不是另一个表中的列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 2012-03-22
  • 1970-01-01
  • 2020-03-02
  • 2014-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多