2010-07-05 85 views
2

我在存儲的人一樣的唯一遞增的數字串的組合名稱的MySQL表列,所以我必須存儲爲這樣的名字:去掉數字/從MySQL字符串列數字字符

Patrick, Patrick1, Patrick2, ..... Patrick10, David, David2, .... David5 

我如何檢索只有字母名稱本身,沒有數字?假設我想按不同的名稱進行分組,並按每組進行計數,所以我得到類似以下的結果。

name | frequency 
----------------- 
Patrick | 10 
David | 5 

回答

1

一個解決辦法是這樣的:(它看起來並不好,但它的工作原理)

SELECT 
    TRIM(TRAILING '0' FROM 
    TRIM(TRAILING '1' FROM 
     TRIM(TRAILING '2' FROM 
     TRIM(TRAILING '3' FROM 
      -- ... 
      TRIM(TRAILING '8' FROM 
       TRIM(TRAILING '9' FROM name)))))) AS name 
FROM your_table 

然後你可以用GROUP BY從結果中進行選擇:

SELECT name, count(*) AS frequency FROM (
-- previous select 
) AS t 
GROUP BY name 
+0

只要數字沒有達到21就可以。 – 2010-07-05 10:32:26

+0

'Patrick10'也失敗了。 – 2010-07-22 19:39:18

+0

哎呀!然後這些數字應該被替換爲一個,然後使用TRIM。 – 2010-07-22 19:48:28

0

我會稍微想一想,但我會建議如果您需要一個可區分的數字,您將它保留在不同的列中。這樣,你就不會遇到這種困難。

+0

我不是維護該表,並且我無法訪問填充列的代碼,因此我的請求 – Olaseni 2010-07-05 08:20:56

+1

您對Olaseni表示我最深切的同情。 – 2010-07-05 08:49:29

0

你可以使用udf

,然後嘗試像follwing

select REGEX_REPLACE(name, [0-9], '') as Name, Count(Name) 
     from tableName 
     Group by Name 
+0

沒有爲我工作 – Olaseni 2010-07-05 08:40:08

+0

我認爲這是Oracle和PostgreSQL;我無法在MySQL手冊中找到它。 – 2010-07-05 08:53:32

+0

REGEXP_REPLACE的MySQL版本可以從https://launchpad.net/mysql-udf-regexp以UDF形式獲得 – 2010-07-05 10:29:16

0

你可以在「鏈」替換命令是這樣的(這將刪除數字0,1,2查詢)。您可以擴展這些其他數字,但我不知道這將在大型數據集上表現如何:

select replace(replace(replace(Name,「0」,「」),「1」, 「」),「2」,「」);

我也會想,做Brian的建議會更好。

+0

如何確保只刪除附加數字? – Olaseni 2010-07-05 08:57:27

+0

我正要說,沃爾克已經破解了它。我想你必須創建自己的存儲函數來處理名稱。如果您需要它,請參閱MySQL參考手冊12.1.15中的更多信息。 – 2010-07-05 09:04:00