You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL从表取数并将列名与值转换为键值对格式?

嘿,这个需求其实不难实现,核心就是字符串拼接加上条件判断来处理特殊列。不同的数据库系统函数略有差异,我给你整理了几种常见场景的实现方式:

基础实现:生成字符串形式的键值对

假设你的表名为your_table,包含id、name、8_length这些列,下面分数据库举例:

MySQL 版本

MySQL中使用CONCAT函数拼接字符串,针对8_length列用CASE做特殊处理:

SELECT
  CONCAT(
    'id:', id, ',',
    'name:', name, ',',
    CASE 
      WHEN `8_length` IS NOT NULL THEN CONCAT('8=', `8_length`)
      ELSE '8:NULL' -- 处理空值的情况,可根据需求调整
    END
  ) AS key_value_pairs
FROM your_table;

注意:因为8_length列名以数字开头,需要用反引号`包裹。

PostgreSQL 版本

PostgreSQL支持||拼接运算符,用CONCAT_WS可以更优雅地处理分隔符(避免最后多一个逗号):

SELECT
  CONCAT_WS(',',
    'id:' || id,
    'name:' || name,
    CASE 
      WHEN "8_length" IS NOT NULL THEN '8=' || "8_length"
      ELSE '8:NULL'
    END
  ) AS key_value_pairs
FROM your_table;

注意:PostgreSQL中带特殊字符/数字开头的列名需要用双引号"包裹。

SQL Server 版本

SQL Server用CONCAT函数,列名以数字开头时要用方括号[]包裹:

SELECT
  CONCAT(
    'id:', id, ',',
    'name:', name, ',',
    CASE 
      WHEN [8_length] IS NOT NULL THEN CONCAT('8=', [8_length])
      ELSE '8:NULL'
    END
  ) AS key_value_pairs
FROM your_table;
进阶方案:生成JSON格式的键值对

如果你的场景更适合用结构化的JSON(后续处理更方便),可以用数据库自带的JSON函数:
比如MySQL的JSON_OBJECT:

SELECT
  JSON_OBJECT(
    'id', id,
    'name', name,
    '8', `8_length` -- 直接将键设为'8',值对应原列的内容,等价于"8":486
  ) AS key_value_json
FROM your_table;

PostgreSQL可以用json_build_object,SQL Server用FOR JSON PATH,逻辑都是类似的,把8_length的键替换成8即可满足需求。

内容的提问来源于stack exchange,提问作者user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:41:52