我在由逗号分隔的字符串组成的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