2011-03-01 39 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

相关问题