MySQL更新字段带有一些前缀

时间:2012-06-29 23:38:26

标签: mysql

我的表格前缀为bok-inv-

id | number
1  | bok-1
2  | inv-3
3  | bok-2
4  | inv-2
5  | inv-10
6  | bok-3

如何对以number为前缀的字段inv-进行排序? 在这种情况下,结果将是:

id | number
1  | bok-1
2  | inv-1
3  | bok-2
4  | inv-2
5  | inv-3
6  | bok-3

2 个答案:

答案 0 :(得分:1)

你可以使用MySQL的SUBSTRING()函数:

ORDER BY CAST(SUBSTRING(number, 5) AS SIGNED)

sqlfiddle上查看。

但是,如果可能的话,最好将前缀和整数部分存储在不同的列中:

ALTER TABLE mytable
  ADD COLUMN prefix ENUM('bok', 'inv'),
  ADD COLUMN suffix INT;

UPDATE mytable SET
  prefix = LEFT(number, 3),
  suffix = SUBSTRING(number, 5);

ALTER TABLE mytable
  DROP COLUMN number;

答案 1 :(得分:1)

基本上你应该重新设计你的数据库结构。遗憾的是,没有其他选项可以有效地处理这个,因为数据库不会对这些破折号进行索引因此,在两个领域中分开是最常见的做法。否则,您将对每个order by子句运行表扫描。

编辑:除了您讨论的信息之外:http://chat.stackoverflow.com/rooms/13241/discussion-between-eggyal-and-gusdecool很明显这是一个错误的设计,您要求的操作根本不应该执行。

如果没有创建一个像样的结构并以这种方式创建一个合法的解决方案,那么实现它是不可能的。