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

SQL新手求助:基于重复id列与brand列创建idx列作为主键

问题描述

我是SQL新手,现有一张包含id、brand列的表,其中id列存在重复数据,原表数据如下:

idbrand
1100
1200
2100
2200
3100
4100

希望基于id和brand列创建新的idx列,生成结果如下:

idbrandidx
1100101
1200201
2100102
2200202
3100103
4100104

需要将idx作为其他场景的主键,求解决方案。

核心逻辑分析

idx的生成规则:截取brand的前两位数字,与id拼接成新整数。比如brand=100取前两位10,加上id=1得到101;brand=200取前两位20,加上id=1得到201。

各数据库实现方案

MySQL/MariaDB

用LEFT()截取前两位,CONCAT()拼接后转无符号整数:

SELECT 
    id,
    brand,
    CAST(CONCAT(LEFT(brand, 2), id) AS UNSIGNED) AS idx
FROM your_table_name;

若需直接给表新增idx列并赋值:

ALTER TABLE your_table_name ADD COLUMN idx INT;
UPDATE your_table_name 
SET idx = CAST(CONCAT(LEFT(brand, 2), id) AS UNSIGNED);

SQL Server

先将brand转为字符串再截取,拼接后转整数:

SELECT 
    id,
    brand,
    CAST(CONCAT(LEFT(CAST(brand AS VARCHAR), 2), id) AS INT) AS idx
FROM your_table_name;

新增列并更新:

ALTER TABLE your_table_name ADD idx INT;
UPDATE your_table_name 
SET idx = CAST(CONCAT(LEFT(CAST(brand AS VARCHAR), 2), id) AS INT);

PostgreSQL

用::TEXT转字符串,LEFT()截取后通过||拼接,再转整数:

SELECT 
    id,
    brand,
    (LEFT(brand::TEXT, 2) || id)::INT AS idx
FROM your_table_name;

新增列并更新:

ALTER TABLE your_table_name ADD COLUMN idx INT;
UPDATE your_table_name 
SET idx = (LEFT(brand::TEXT, 2) || id)::INT;

Oracle

用SUBSTR()截取前两位,拼接后转数字:

SELECT 
    id,
    brand,
    TO_NUMBER(SUBSTR(brand, 1, 2) || id) AS idx
FROM your_table_name;

新增列并更新:

ALTER TABLE your_table_name ADD idx NUMBER;
UPDATE your_table_name 
SET idx = TO_NUMBER(SUBSTR(brand, 1, 2) || id);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:19:54