SQL Server 中 NVARCHAR 列的 Order By 子句

发布于 2024-10-06 19:06:37 字数 182 浏览 6 评论 0原文

我需要对 nvarchar 列进行排序。问题是该列没有相同的条目模式,该列的某些行的示例是

12    
9     
TEF      
78F    
T2R

如何按 order By 子句对该列进行排序?唯一令我宽慰的是该列仅包含数字和字母数字字符。

I need to make the order by for the nvarchar column. The issue is this that the column doesn't have the same pattern of entry, example of some rows of the column are

12    
9     
TEF      
78F    
T2R

How to sort this column by order By clause? The only relief I have is that this column contains only numeric and alpha numeric characters.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

血之狂魔 2024-10-13 19:06:37
ORDER BY
   RIGHT(REPLICATE(N' ', 500) + MyValue, 500)

所以

9
12
78F
T2R
TEF 

变成

            9
           12
          78F
          T2R
          TEF 

Which will sort正确

你不能依赖ISNUMERIC

ORDER BY
   RIGHT(REPLICATE(N' ', 500) + MyValue, 500)

So

9
12
78F
T2R
TEF 

becomes

            9
           12
          78F
          T2R
          TEF 

Which will sort correctly

You can't rely on ISNUMERIC

执着的年纪 2024-10-13 19:06:37
select
    *
from
    table
order by
    CASE
       WHEN not column like '%[^0-9]%' THEN CONVERT(int,column)
       WHEN column like '[0-9]%' THEN CONVERT(int,SUBSTRING(column,1,PATINDEX('%[A-Z]%',column)-1))
    END,
    CASE
       WHEN not column like '%[^0-9]%' THEN NULL
       WHEN column like '[0-9]%' THEN SUBSTRING(column,PATINDEX('%[A-Z]%',column),9000)
       ELSE column
    END
select
    *
from
    table
order by
    CASE
       WHEN not column like '%[^0-9]%' THEN CONVERT(int,column)
       WHEN column like '[0-9]%' THEN CONVERT(int,SUBSTRING(column,1,PATINDEX('%[A-Z]%',column)-1))
    END,
    CASE
       WHEN not column like '%[^0-9]%' THEN NULL
       WHEN column like '[0-9]%' THEN SUBSTRING(column,PATINDEX('%[A-Z]%',column),9000)
       ELSE column
    END
杀手六號 2024-10-13 19:06:37

我猜你的问题是它没有正确排序数字和文本。

本文介绍了一种方法:

如何对包含数字的 SQL Server 中的 VARCHAR 列进行排序?

来自文章:

select MyColumn
from MyTable
order by 
    case IsNumeric(MyColumn) 
        when 1 then Replicate(Char(0), 100 - Len(MyColumn)) + MyColumn
        else MyColumn
    end

I'm guessing that you issue is that its not sorting the numbers and text correctly.

This article explains one approach:

How do I sort a VARCHAR column in SQL server that contains numbers?

From the article:

select MyColumn
from MyTable
order by 
    case IsNumeric(MyColumn) 
        when 1 then Replicate(Char(0), 100 - Len(MyColumn)) + MyColumn
        else MyColumn
    end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文