【问题标题】:mysql outfile column with leading zeros带有前导零的mysql outfile列
【发布时间】:2012-10-09 04:22:22
【问题描述】:

我正在尝试将数据导出到 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 条目周围加上单引号吗?
  • 我试过 CONCAT("'",event.id,"'") as id 这把单引号放在了 csv 中,这对客户来说是不可接受的
  • 您的问题很可能与 CSV 解释器有关,它试图将看起来像数字的事物处理为数字。这就是为什么要加上单引号的原因。这尤其出现在邮政编码之类的地方。为什么客户端反对单引号?

标签: mysql csv into-outfile


【解决方案1】:

作为一种解决方法,用双引号将 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,-
猜你喜欢
  • 2013-07-01
  • 2014-06-24
  • 1970-01-01
  • 2017-11-16
  • 2014-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-01
相关资源
最近更新 更多