2012-10-18 60 views
3

我想將數據導出到csv文件中,但是我的前導零被切碎了......我無法修改數據,因此LPAD不是一個選項。此外,ID不是一個設定的長度......它可能是6個字符長,或多達11個。它也可能有字母(在這種情況下,csv將這些值顯示爲字符串)。無論如何,具有前導零的字段具有。在數據庫中前導零,並存儲爲varchar我需要拉這些值,並在CSV與零顯示出來:帶有前導零的mysql outfile列

SELECT 
    'ID', 
    'Par 1', 
    'Par 2' 
UNION 
(SELECT 
    result.id as 'ID',  
    COALESCE(sum(if(result.parameter = '10001', result.result, NULL)),'-') as 'Par 1', 
    COALESCE(sum(if(result.parameter = '10002', result.result, NULL)),'-') as 'Par 2' 
    INTO OUTFILE '/tmp/file.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '\"' 
FROM (
    SELECT 
     event.id, 
     resultset.parameter_cd, 
     resultset.result 
    FROM event 
    Inner Join resultset ON resultset.id = event.id 
    ) as result 
group by result.id 
order by 
    result.id ASC) 
在這種情況下,「ID」

可能有前導零...的結果集從mysql顯示它們,但是在導出的csv中它們被完全去掉了????

+0

你可以在CSV條目周圍加單引號嗎? –

+0

我試過'CONCAT(「'」,event.id,''「)作爲ID'這把單引號,但他們出現在csv這是客戶端不可接受的 –

+1

您的問題是更可能與試圖將數字看作數字的東西的CSV解釋器。這就是爲什麼單引號輸入。這尤其表現在郵政編碼等事情。爲什麼客戶反對單引號? –

回答

0

作爲解決方法將雙引號括起來,並將enclosed by取出,因爲數字字段不需要它們

(SELECT 
    concat ('\"', result.id, '\"') as 'ID', 
    COALESCE(sum(if(result.parameter = '10001', result.result, NULL)),'-') as 'Par 1', 
    COALESCE(sum(if(result.parameter = '10002', result.result, NULL)),'-') as 'Par 2' 
    INTO OUTFILE '/tmp/file.csv' FIELDS TERMINATED BY ','  
+0

仍然得到相同的損壞結果:9818245,30.4, - SA05956,21.4, - 3337,12.9, - <-----應該是003337 –