2010-10-15 40 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