2014-01-23 60 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

我剛剛更新了主要問題! –