带前导零的MySQL OUTFILE列

4

我正在尝试将数据导出到CSV文件中,但是我的前导零被切掉了...在提取数据后,我无法修改数据,因此LPAD不是一个选项。另外,ID不是固定长度的...它可以是6个字符长,也可以长达11个字符。它可能也包含字母(在这种情况下,CSV将这些值显示为字符串)。无论如何,具有前导零的字段在数据库中具有前导零并存储为varchar。我需要提取这些值并在CSV中显示它们的零:

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文件中它们完全被剥离了???

你能在CSV条目周围加上单引号吗? - Brian Hoover
我尝试使用CONCAT("'",event.id,"'") as id,这样可以添加单引号,但在 CSV 文件中会显示出来,客户端无法接受。 - Katherine C
1
你的问题很可能出在CSV解释器上,它试图将看起来像数字的内容处理为数字。这就是为什么要加入单引号的原因,特别是在邮编等内容中尤为明显。客户为什么反对使用单引号? - Brian Hoover
1个回答

0
作为一种变通方法,将ID用双引号括起来,并将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 ','    

仍然得到相同的错误结果:9818245,30.4,- SA05956,21.4,- 3337,12.9,- <----- 应该是 003337 - Katherine C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接