2014-10-29 63 views
0

首先,由於我的MySQL用戶沒有在服務器上擁有FILE權限,我不得不使用下面的命令將我的SELECT語句輸出傳遞給shell中的文件,而不是直接在MySQL中使用它,並能夠使用INTO OUTFILE & FIELDS TERMINATED BY '|',我猜測它可以解決我所有的問題。需要在SHELL的MySQL輸出中添加一個分隔符

所以,我有以下行搶我的領域:

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=|後有望操縱塊中的數據。

當我得到它的工作時,有很多更多的可變長度和字數列pr列,所以我不能使用依賴位置來添加分隔符的方法。

我覺得數據首先被轉儲時需要設置分隔符。

我已經試過了諸如:

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

你可以使用CONCAT_WS函數來收到每行一個concateneted字符串:

select concat_ws('|', id, UNIX_TIMESTAMP(time) , company) from database.table_name 

編輯:缺少逗號添加,對不起!

+0

concat_ws給我一個錯誤:調用本地函數'concat_ws'中的參數不正確 – guppshouse 2014-10-29 13:27:57

+0

'|'後面只有一個逗號缺失。這工作,我很高興。非常感謝你。 – guppshouse 2014-10-29 13:39:55

+0

上面加了缺少逗號,很抱歉,很高興我能幫上忙。 – evilive 2014-10-29 14:03:38

相關問題