2010-10-15 42 views
0

我正在使用mysql & perl。我有以下的值,我在我的數據庫中的一個:MySQL正則表達式和不同值

123 Hollywood 
345 New York 
847 Hollywood 
192 Boston 
876 Chicago 

我想選擇所有不同城市的....即,結果將是:

Hollywood 
New York 
Boston 
Chicago 

有一種通過msyql做到這一點的方法?我會想象某種REGEXP的,但似乎無法得到的邏輯:

SELECT * FROM table WHERE address REGEXP '' 
+0

是多少部分「地址」字段,還是不同字段中的記錄ID?如果它是相同的領域,這可能會更困難。 – 2010-10-15 23:21:48

+0

呃,'極限1'沒有辦法嗎? – Wrikken 2010-10-15 23:27:43

回答

0

假設您的地址總是在格式<numbers><space><city>

SELECT 
    DISTINCT TRIM(LEADING SUBSTRING_INDEX(address, ' ', 1) FROM address) AS city 
FROM 
    locations 

這是我用來驗證測試數據查詢工作。請注意,我將測試表命名爲locations。我的MySQL服務器是5.1.36版本:

-- 
-- Table structure for table `locations` 
-- 

CREATE TABLE IF NOT EXISTS `locations` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `address` varchar(255) COLLATE utf8_bin DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `address` (`address`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=6 ; 

-- 
-- Dumping data for table `locations` 
-- 

INSERT INTO `locations` (`id`, `address`) VALUES 
(1, '123 Hollywood'), 
(2, '345 New York'), 
(3, '847 Hollywood'), 
(4, '192 Boston'), 
(5, '876 Chicago'); 

這是我對這個表運行的精確查詢:

SELECT DISTINCT TRIM(
LEADING SUBSTRING_INDEX(address, ' ', 1) 
FROM address) AS city 
FROM locations 

這是我得到的結果是:

**city** 
Hollywood 
Boston 
New York 
Chicago 
+0

@ginius:你知道你的MySQL服務器是什麼版本嗎? 5.1,有希望嗎?我已經嘗試了基於你所描述的基於數據庫的精確查詢。也許我誤解了一個細節,或者你的MySQL版本不支持我在查詢中使用的其中一個功能。 – Thomas 2010-10-16 15:34:03

+0

@ginius:或者有可能您沒有正確複製查詢? 'SUBSTRING_INDEX(address,'',1)''中引號之間有一個空格很重要。 – Thomas 2010-10-16 15:43:39