2011-03-01 85 views
1

我在由逗號分隔的字符串組成的MySQL表中有一列。我想將此列轉換爲列中出現的一組不同的字符串(對於表中的任何行 - 該集合包括出現在此列中表的任何行中的字符串)。什麼是最簡單的方法來完成這一點?從MySQL表中的逗號分隔列中獲取不同的值?

該解決方案不需要是純粹的MySQL。它可能涉及unix,perl等。

+0

那麼,MySQL沒有任何功能來拆分字符串。拆分字符串將是一個相當大的挑戰。 – BoltClock 2011-03-01 19:17:48

回答

1

我選擇的方式是mysql外殼和管結果到tr和排序之外運行的選擇mysql命令--uniq

mysql my_db [-p -u -h] -se "select my_column from my_table;" | tr ',' '\n' | sort -u 

這是非常簡單的,似乎給出了正確的結果,據我所知。

+2

不錯的單線!我建議在mysql中使用-s標誌以避免將列標題與輸出混合在一起。另外,如果你指定了db,那麼你不需要使用'use my_db;'。像這樣:'mysql my_db [-p -u -h] -se「select my_column from my_table;」 | tr',''\ n'|排序-u' – 2011-03-01 23:34:33

1

您可能使用SELECT INTO OUTFILEsedLOAD DATA INFILE從逗號分隔列中可能會得到一個不同字符串的快速和髒清單。

基本上,您希望將文本數據轉儲爲平面文件,使用逗號作爲行分隔符,以便在將每個字符串加載回數據庫時將其視爲單獨的行。然後將提取的內容加載到一個新表中並選擇不同的值。

關閉我的頭頂,代碼會是這個樣子:

select str 
into outfile 
'/tmp/your_table_data.txt' 
lines terminated by ',' 
from your_table; 

sed -e 's/\\,/,/g' -e 's/,$//' /tmp/your_table_data.txt > /tmp/commadelimited.txt 

create table your_table_parsed(str text); 

load data infile '/tmp/commadelimited.txt' 
ignore into table your_table_parsed 
fields terminated by ',' 
lines terminated by ','; 

select distinct str from your_table_parsed; 
+0

感謝您的建議(+1)。最終,我選擇了一種在MySQL之外運行的解決方案。 – jonderry 2011-03-01 22:47:39