【发布时间】:2021-12-07 19:52:54
【问题描述】:
我在下表中遇到了 Postgres ORDER BY 问题:
em_code name
EM001 AAA
EM999 BBB
EM1000 CCC
要向表中插入一条新记录,
- 我用
SELECT * FROM employees ORDER BY em_code DESC选择最后一条记录 - 使用 reg exp 从 em_code 中剥离字母并存储在
ec_alpha - 将remaing部分转换为整数
ec_num - 加一
ec_num++ - 再次使用足够的 zeors 和前缀
ec_alpha填充
当em_code达到EM1000时,上述算法失败。
第一步将返回 EM999 而不是 EM1000,它会再次将 EM1000 生成为新的em_code,从而打破唯一键约束。
知道如何选择EM1000吗?
【问题讨论】:
-
为什么不直接使用序列?
-
天哪,经典之作。计算机化纸质系统的规则一,智能数字是愚蠢的。将 em 放在一个列中,将 int 放在另一列中。需要时,将其重新构建为愚蠢的人类的一个 ID。
-
@Erwin Brandstetter 感谢您的编辑
-
请注意,如果一次有多个事务是
INSERTing,您描述的方法将惨遭失败,除非您首先LOCK TABLE。关于排序,您可能会发现 this question 信息量很大。
标签: sql postgresql types sql-order-by natural-sort