首先,由于我的MySQL用户没有服务器上的FILE权限,我不得不使用下面的行将我的SELECT语句输出管道传输到shell中的文件,而不是直接在MySQL中执行它并且能够使用INTO OUTFILE
&我猜的FIELDS TERMINATED BY '|'
会解决我所有的问题。
所以我有以下一行来抓住我的字段:
echo "select id, UNIX_TIMESTAMP(time), company from database.table_name" | mysql -h database.mysql.host.com -u username -ppassword user > /root/sql/output.txt
这将输出以下3列:
63 1414574321 person one
50 1225271921 Another person
8 1225271921 Company with many names
10 1414574567 Person with Company
然后我在其他脚本中使用该数据来执行某些任务。
我的问题是,有些专栏,其中第三个专栏,'公司'就是一个例子,其数据中有空格,这意味着我的WHILE循环后来会被抛弃。
我想在输出中添加分隔符,所以它看起来像这样:
63|1414574321|person one
50|1225271921|Another person
8|1225271921|Company with many names
10|1414574567|Person with Company
这样我希望以后可以使用awk -F|
和IFS=|
操作块中的数据。
当我使用它时,有许多列具有可变长度和单词数量的列,因此我不能使用依赖于位置的方法来添加分隔符。
我觉得首先要转储数据时需要设置分隔符。
我尝试过这样的事情:
echo "select (id, + '|' + UNIX_TIMESTAMP(time), + '|' + company) from database.table_name" | mysql -h database.mysql.host.com -u username -ppassword user > /root/sql/output.txt
没有运气,它只是将字符添加到输出文件的标题中。
有没有人看到我能做的解决方案?
如果有人想知道,我正在从2个数据库中转储数据,比较时间戳并将最新数据写回两个数据库。
答案 0 :(得分:0)
您可以使用concat_ws函数每行接收一个连接字符串:
select concat_ws( '|', id, UNIX_TIMESTAMP(time) , company ) from database.table_name
编辑:添加了丢失的逗号,抱歉!