1

您好我目前正在做一个数据库需要对批号进行排序的项目

prefix is nvarchar
lotnum is int
suffix is nvarchar

我已经设法将我使用的批号代码转换为

Select (case when prefix is null then '' else prefix end) +
CONVERT ( nvarchar , ( lotnumber ) ) +(case when suffix is null then '' else suffix end)
(values in the database are a1a,1a,1,2,100)

order by lotnumber我得到

a1a
1a
1
2
100

然后前缀到 order by 并得到这个结果

1
a1a
1a
2
100

我也添加了后缀并返回相同的结果

我需要按如下方式订购

1
1a
2
100
a1a

请有人可以帮我解决这个问题

4

1 回答 1

3

您是否尝试过按所有三列排序?

ORDER BY prefix, lotnum, suffix

顺便说一句,我可以看到您正在使用 SQL Server。为了使事情更便携,我建议使用 COALESCE 和 CAST 而不是 CASE/WHEN 和 CONVERT 作为前缀和 lotnum。完整查询可能如下所示。

SELECT
  COALESCE(prefix, '')
  + CAST(lotnum AS NVARCHAR)
  + COALESCE(suffix, '') AS lot_number
FROM
  YourTable
ORDER BY
  COALESCE(prefix, '')
  ,lotnum
  ,COALESCE(suffix, '')
于 2012-07-27T10:24:02.490 回答