如何为数据表新增值依次为one、two、three等序列值的新列
实现方案
关系型数据库的表本身是无序集合,不能直接依赖默认行顺序赋值,你当前表中eid是从1开始连续递增的有序字段,以它为映射依据就能准确得到预期结果,分两步实现:
- 先给表新增字符串类型的
newCol列 - 按
eid值匹配对应的英文序列词填充即可
通用兼容写法(支持MySQL、PostgreSQL、SQL Server等所有主流数据库)
如果你的数据量不大,直接用CASE WHEN手动映射即可,兼容性最好:
-- 1. 新增列,字段长度按需调整,足够存对应英文单词即可 ALTER TABLE 你的表名 ADD COLUMN newCol VARCHAR(20); -- 2. 按eid映射填充值 UPDATE 你的表名 SET newCol = CASE eid WHEN 1 THEN 'one' WHEN 2 THEN 'two' WHEN 3 THEN 'three' WHEN 4 THEN 'four' -- 后续有更多行的话,在这里按顺序补充对应映射关系即可 END;
各数据库简化写法
- PostgreSQL:可以直接用内置格式化函数自动转英文基数词,不用手动枚举
ALTER TABLE 你的表名 ADD COLUMN newCol VARCHAR(20); UPDATE 你的表名 t SET newCol = to_char(t.eid, 'FMinwords');
- SQL Server:可以用
CHOOSE函数简化映射逻辑
ALTER TABLE 你的表名 ADD newCol VARCHAR(20); UPDATE 你的表名 SET newCol = CHOOSE(eid, 'one','two','three','four' /* 按需补充后续词汇即可 */);
注意:不要使用不带ORDER BY的行号函数(比如ROW_NUMBER()不加排序)来生成序号赋值,没有明确排序规则的行号可能随数据增删、索引变动发生偏移,用表内已有的稳定有序主键
eid做关联是最稳妥的方案。
执行完上述语句后,就能得到预期结果:
| eid | ename | newCol |
|---|---|---|
| 1 | abc | one |
| 2 | def | two |
| 3 | ghi | three |
| 4 | jkl | four |
内容的提问来源于stack exchange,提问作者Sushil Nyayadhish
相关产品推荐
相关产品推荐

