0

我有一个带有序列号字段(MS-1、MS-2、...、MS-100、...、MS-800 等)的 MySQL 表。这些数字是唯一标识符(不是主键)对于一组数据。问题是排序。有没有办法获取这个字段并生成一个用于排序的新字段?它需要将 MS-1 转换为 ms0001、MS-845 到 ms0845 等。

我需要以两个字段结束:一个包含原始值 (MS-1),另一个包含标准化值“ms0001”。MS-1 将用于显示,而 ms0001 将用于链接。

此外,需要为新行自动生成此字段。

谢谢!

更新:根据 eggyal 的建议,我尝试了这个:

UPDATE Resources 
SET collNum = CONCAT('MS-',LPAD(SUBSTRING_INDEX(eadFaUniqueIdentifier,'-',-1),4,'0')

Resources 是有问题的表,
collNum 是我要生成的新字段,
eadFaUniqueIdentifier 包含原始值。

但是,我收到此错误:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 '' 附近使用正确的语法。(我​​使用的是 MySQL 5.1.61。)

4

2 回答 2

1
ORDER BY CHAR_LENGTH(field), field
于 2012-08-04T15:53:23.543 回答
1

采取 eggyal 的回答:https
://stackoverflow.com/a/11809954/491243 但如果你想永久改变它的值,你可以试试这个:

UPDATE myTable
SET columnA = CASE char_length(replace(columnA,'MS-', ''))
                   WHEN 0 THEN 'MS-0000'
                   WHEN 1 THEN CONCAT('MS-000', replace(columnA, 'MS-', ''))
                   WHEN 2 THEN CONCAT('MS-00', replace(columnA, 'MS-', ''))
                   WHEN 3 THEN CONCAT('MS-0', replace(columnA, 'MS-', ''))
                   ELSE        columnA
              END

myTable- 将其更改为您原来的表名
columnA- 更改为包含MS-*值的列的名称

正如 eggyal 所建议的:

UPDATE myTable 
SET columnA = CONCAT('MS-',LPAD(SUBSTRING_INDEX(columnA,'-',-1),4,'0'))
于 2012-08-04T15:59:08.970 回答