【问题标题】:SQl Server : sort alphanumeric first followed by NumericSQl Server:首先排序字母数字,然后是数字
【发布时间】:2023-03-26 01:09:01
【问题描述】:
SELECT  dbo.base_project.id as ID, 
        dbo.base_project.name as Name,
        dbo.base_project.status
FROM         dbo.base_project
ORDER BY   
Case When IsNumeric(dbo.base_project.name) = 1 
     then Right(Replicate('0',21) + dbo.base_project.name, 20)
     When IsNumeric(dbo.base_project.name) = 0 
     then Left(dbo.base_project.name + Replicate('',21), 20)
     Else dbo.base_project.name End

我可以先按数字排序,然后按字母数字排序。我需要反向排序,我需要先按字母数字排序,然后按数字排序

示例:

1, 3, 13036, 101-2011-009X2, 20-100281-01, ELO-001, ELO001B, ELO002B

【问题讨论】:

  • 你的意思是在同一个领域吗?示例数据是您在被排序的列中的数据吗?您应该使用您正在处理的查询和架构以及您尝试实现的结果来更新问题。
  • @尼克。我更新了问题
  • 提供更多信息,例如查询和架构
  • @马德里。因此,您目前按以下顺序获取名称:1、3、13036、101-2011-009X2、20-100281-01、ELO-001、ELO001B、ELO002B,但您希望它们按以下顺序排列:ELO-001、ELO001B、 ELO002B, 1, 3, 13036, 101-2011-009X2, 20-100281-01?
  • 我错过了输入,这是所需的顺序:101-2011-009X2、20-100281-01、ELO-001、ELO001B、ELO002B、1、3、13036?

标签: sql sorting alphanumeric


【解决方案1】:

您可以通过使用子查询来完成此操作。子查询将数字与非数字分开,并为它们提供计算字段,以便它们可以按主查询的顺序使用。

SELECT 
    A.ID
,   A.Name
,   A.status
FROM 
(
    SELECT  
        dbo.base_project.id as ID
    ,   dbo.base_project.name as Name
    ,   dbo.base_project.status
    ,   1 as ordering
    ,   RIGHT(REPLICATE('0',21) + dbo.base_project.name, 20) As padded
    FROM dbo.base_project
    WHERE ISNUMERIC(dbo.base_project.name) = 1
UNION
    SELECT  
        dbo.base_project.id as ID
    ,   dbo.base_project.name as Name
    ,   dbo.base_project.status
    ,   0 as ordering
    ,   LEFT(dbo.base_project.name + REPLICATE('',21), 20) As padded
    FROM dbo.base_project
    WHERE ISNUMERIC(dbo.base_project.name) <> 1
) A
ORDER BY A.ordering, A.padded

【讨论】:

    猜你喜欢
    • 2013-06-29
    • 2021-09-03
    • 2017-05-11
    • 2021-11-28
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    相关资源
    最近更新 更多