【问题标题】:ORDER BY from MIN to MAXORDER BY 从 MIN 到 MAX
【发布时间】:2014-07-11 18:22:48
【问题描述】:

我是 SQL Server 的新手。我有一个小问题,我无法查找。关键是我无法在我的列STATEID 中获取数据的顺序,我想将它从最小值排序到最大值。我正在使用ORDER BYASC,但它不起作用。还有什么其他方式可以从我的列STATEID 中得到精确的最小到最大序列。我正在使用 SQL Server 2008。

这是我的代码示例。

ALTER PROCEDURE [dbo].[basicGatherSelect]
    @StateID            nvarchar(5),    
    @Name               nvarchar(50)
AS
BEGIN 
    BEGIN TRANSACTION 

    SET NOCOUNT ON;

    SELECT  
       StateID, name
    FROM 
        tblState 
    ORDER BY 
        STATEID ASC

    IF  @@error <> 0
    BEGIN
            ROLLBACK
            RAISERROR ('PROBLEM', 16, 1)
            RETURN
    END

    COMMIT
END

结果:

  • 10黎班
  • 3 俄罗斯
  • 4 莱托尼亚
  • 5 奥地利
  • 7 巴西
  • 8 Njemacka
  • 9 阿根廷
  • 1 斯比贾
  • 2 波斯纳

【问题讨论】:

  • 你能发布这些行吗?
  • 我现在发布了。我会发送图片,但我没有声誉
  • 您是否使用 NVARCHAR 作为 STATEID?如果它们都是数字,则使用 INT。
  • Bad habits to kick : choosing the wrong data type - 你应该始终使用最合适的数据类型 - 毕竟这就是它们的用途!如果您有 numbers - 那么请使用 numeric 数据类型,这样您就可以将它们相加并正确排序!不要仅仅出于懒惰而使用字符串!
  • 将STATEID转换为INT,然后排序。 CAST(STATEID AS INT) ASC

标签: sql sql-server-2008


【解决方案1】:

试试这个:

ALTER PROCEDURE [dbo].[basicGatherSelect]
    @StateID            nvarchar(5),    
    @Name               nvarchar(50)
AS
BEGIN 
    BEGIN TRANSACTION 

    SET NOCOUNT ON;

    SELECT  
       StateID, name
    FROM 
        tblState 
    ORDER BY 
        CAST(STATEID AS INT) ASC

    IF  @@error <> 0
    BEGIN
            ROLLBACK
            RAISERROR ('PROBLEM', 16, 1)
            RETURN
    END

    COMMIT
END

【讨论】:

  • 当我把数据类型改成int排序已经成功通过了!这是否意味着当数据类型为 nvarchar 且列包含数字时,它不能从小到大排序
【解决方案2】:

如果您无法控制参数的来源(因此您无法将其更改为 int)

按字符串排序会导致它像按字母顺序排序一样考虑其他字符。

如果你有一个有 21 个项目的东西......它会去......

1、10、11、12...等,2、20、21、3、4...等

您总是可以转换为 int 进行排序(假设 ID 始终是数字):

ORDER BY 
    CAST(@StateID AS INT) ASC

关于这篇文章的更多信息:SQL ORDER chars numerically

【讨论】:

  • 当我把数据类型改成int排序已经成功通过了!这是否意味着当数据类型为 nvarchar 且列包含数字时,它不能从小到大排序
猜你喜欢
  • 2010-09-30
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
  • 2013-07-07
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 2015-11-04
相关资源
最近更新 更多