Sql server sql中的字母数字排序

Sql server sql中的字母数字排序,sql-server,tsql,Sql Server,Tsql,嗨,我目前正在做一个项目,在这个项目中,数据库需要对批号进行排序 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 e

嗨,我目前正在做一个项目,在这个项目中,数据库需要对批号进行排序

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)
当我
orderbylotnumber
时,我得到

a1a
1a
1
2
100
然后将前缀添加到order by 然后得到这个结果

1
a1a
1a
2
100
我也添加了后缀,并返回相同的结果

我需要按如下顺序订购

1
1a
2
100
a1a

有人能帮我一下吗?

你试过按所有三个栏目订购吗

ORDER BY prefix, lotnum, suffix
顺便说一下,我可以看到您正在使用SQL Server。为了使事情更具可移植性,我建议对前缀和lotnum使用COALESCE和CAST,而不是CASE/WHEN和CONVERT。完整查询可能如下所示

SELECT
  COALESCE(prefix, '')
  + CAST(lotnum AS NVARCHAR)
  + COALESCE(suffix, '') AS lot_number
FROM
  YourTable
ORDER BY
  COALESCE(prefix, '')
  ,lotnum
  ,COALESCE(suffix, '')

prefix、lotnum和suffix是表中的3列还是单个列的一部分?我认为在您的情况下,排序应该按字母顺序进行。哪个数据库系统,哪个版本??SQL只是结构化查询语言-一种被许多数据库系统使用的语言,但不是一种数据库产品。。。这类功能通常是特定于供应商的-因此我们确实需要知道您使用的是什么数据库系统…如果前缀和后缀不存在,请尝试在前面加上空格(“”),而不是空字符串,这样,您的排序依据字段将被解释为varchar-您仍然可以使用没有空格的字段进行显示。我认为第一个建议是最好的。我不认为他真的想将lotnum转换为字符串,这样2将在100之前排序。与其担心零填充或任何事情,只需将数据类型放在一边,按前缀、lotnum、后缀排序即可。@GilM你说得对,我将强制转换错误地放在order by子句中了。“现在修好它。我想,”迭戈。顺便说一下,我认为在orderby中省略COALESCE函数也可以。我相信空值会排在最前面。