我在由逗號分隔的字符串組成的MySQL表中有一列。我想將此列轉換爲列中出現的一組不同的字符串(對於表中的任何行 - 該集合包括出現在此列中表的任何行中的字符串)。什麼是最簡單的方法來完成這一點?從MySQL表中的逗號分隔列中獲取不同的值?
該解決方案不需要是純粹的MySQL。它可能涉及unix,perl等。
我在由逗號分隔的字符串組成的MySQL表中有一列。我想將此列轉換爲列中出現的一組不同的字符串(對於表中的任何行 - 該集合包括出現在此列中表的任何行中的字符串)。什麼是最簡單的方法來完成這一點?從MySQL表中的逗號分隔列中獲取不同的值?
該解決方案不需要是純粹的MySQL。它可能涉及unix,perl等。
我選擇的方式是mysql外殼和管結果到tr和排序之外運行的選擇mysql命令--uniq
mysql my_db [-p -u -h] -se "select my_column from my_table;" | tr ',' '\n' | sort -u
這是非常簡單的,似乎給出了正確的結果,據我所知。
不錯的單線!我建議在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
您可能使用SELECT INTO OUTFILE
,sed
和LOAD 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;
感謝您的建議(+1)。最終,我選擇了一種在MySQL之外運行的解決方案。 – jonderry 2011-03-01 22:47:39
那麼,MySQL沒有任何功能來拆分字符串。拆分字符串將是一個相當大的挑戰。 – BoltClock 2011-03-01 19:17:48