2014-01-23 55 views
0

是否可以根据字符串的某些首字符选择数据库条目,并与具有MySQL的列中的“范围”匹配?使用通配符选择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,价格

+0

[MySql Regex](http://dev.mysql.com/doc/refman/5.5/en/regexp.html)?例如。 '... WHERE my_col RLIKE'^ 1([01] [0-9] | 2 [0-8])'' –

+0

如何自动将字符串'100-128'转换为该正则表达式?你将如何在SQL中做到这一点? – Barmar

回答

1

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

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

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

+0

这个答案很接近,但并不完全是我要找的。我实际上没有加入任何表格,我只有一张表格提供了我的送货信息(包含诸如ziprange,price,country等栏目)。我似乎无法得到这个工作.. –

+0

你匹配的完整邮编在哪里?我认为你需要更多的细节更新你的问题。显示表格的示例,以及您试图获得的结果。 – Barmar

+0

我刚刚更新了主要问题! –