【问题标题】:MySQL CONCAT on each field without explicitly doing soMySQL CONCAT 在每个字段上没有显式这样做
【发布时间】:2015-08-31 13:10:04
【问题描述】:

我有一个脚本,它生成一个带有 MySQL 查询结果的 CSV 文件。我遇到的最初问题是 Excel 将条目 000123(00) 解释为 1230。我按照this 的回答解决了这个问题。

那么现在,如果我的SELECT 如下:

SELECT employee.id,
       employee.access_code,
       employee.contact_number,
       employee.buzzer_number
FROM ...

我将不得不将其更改为:

SELECT CONCAT('\"=\"\"', employee.id, '\"\"\"') AS id,
       CONCAT('\"=\"\"', employee.access_code, '\"\"\"') AS access_code,
       CONCAT('\"=\"\"', employee.contact_number, '\"\"\"') AS contact_number,
       CONCAT('\"=\"\"', employee.buzzer_number, '\"\"\"') AS buzzer_number
FROM ...

这对于许多领域来说似乎很笨拙。有没有一种方法可以用"=""[value]""" 包装每个字段,而无需在SELECT 子句中明确这样做?

【问题讨论】:

  • 导入时可以在Excel端设置每一列的类型
  • @Alex 我知道这一点,但我正在寻找一种在生成 CSV 文件后不需要干预的解决方案。
  • 导入-导出或任何迁移过程始终是唯一的,因此通常您无法预测所有内容。一旦您更改客户端或服务器端的操作系统、MS Office 版本或服务器或客户端上的国家/地区设置,总是需要修复一些问题。所以恕我直言 - 在 Excel 端修复它比浪费时间在 sql 端修复更容易和更快。因为通常没有什么可以修复的。问题只是对内容的解释

标签: mysql csv concatenation


【解决方案1】:

这是您搜索的内容

SELECT
  "tmp",                    -- Databasename
  "statistics",             -- Tablename
  "CONCAT( '\"=\"\"', ",    -- Pre Field
  ", \'\"\"\"\' ",          -- POST FIELD
  "id"                      -- BLOCKED Fields sep with comma

  INTO @DB, @TABLE,@PRE,@POST,@BLOCKED;


SELECT
  CONCAT('SELECT ', @BLOCKED , ',\n',
  GROUP_CONCAT(
    CONCAT(
        @PRE,
        COLUMN_NAME,
        @POST,
        ') AS ' ,
        COLUMN_NAME
    )
  SEPARATOR ',\n') ,
  '\n FROM ', @DB, '.', @TABLE)  
  FROM information_schema.COLUMNS WHERE TABLE_SCHEMA =  @DB AND TABLE_NAME = @TABLE 
  INTO @SQL1;

SELECT @SQL1;  -- only to review the Query

PREPARE stmt FROM @SQL1;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

【讨论】:

  • 感谢您的回答。不过有一个错字,@dDB 应该在第一个INTO 中更改为@DB。更新它,我会接受答案,因为它确实有效
猜你喜欢
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 2018-09-18
  • 2014-06-06
  • 1970-01-01
相关资源
最近更新 更多