2008-12-05 32 views
3

我有playerhandles一個表,像這樣:選擇行,其中第一n個字符是相等的(MySQL的)

1 - [N] Laka 
2 - [N] James 
3 - nor | Brian 
4 - nor | John 
5 - Player 2 
6 - Spectator 
7 - [N] Joe 

從那裏,我想選擇所有的玩家在第一n個字符的比賽,但我不不知道模式,只知道它是第一個n-chars。在上面的例子中,我不想返回1,2,3,4和7行。

這是可能的,並不是太昂貴的MySQL?

+0

什麼是正焦? – xtofl 2008-12-05 14:01:26

+0

NCHAR或NATIONAL CHAR使用預定義的字符集,例如用於MySQL 5.1的UTF-8。 http://dev.mysql.com/doc/refman/5.1/en/charset-national.html – 2008-12-05 14:08:33

+0

你知道N的價值嗎?你可以做一些「GROUP BY SUBSTR(NAME,4)」嗎? – 2008-12-05 14:19:17

回答

3

您可以添加一個exists子句。

select name from players p1 where exists (
    select 1 from players p2 where 
    p2.name like CONCAT(SUBSTRING(p1.name, 1, 3), '%') 
    and p1.name <> p2.name) 

這會給你:
1 - [N]拉卡
2 - [N]詹姆斯
3 - 也不| Brian
4 - 也| John
7 - [N] Joe

在名稱上添加'order by',您可以在代碼中完成其餘工作。

6

如果你知道的N的值,你可以做這樣的事情(n = 3時):

Select * 
FROM players 
WHERE Left(name, 3) in (
    SELECT Left(name, 3) 
    FROM players 
    GROUP BY Left(name, 3) 
    HAVING (Count(*) > 1) 
);