-2

我的表格数据喜欢

id LedgerName
1  "105 AAA"
2  "102 sss"
3  "GGGG"
4  "107 BBB"
5  "BBBB"
6  "101 TTT"

我想对分类帐进行排序

6  "101 TTT"
2  "102 sss"
1  "105 AAA"
4  "107 BBB"
5  "BBBB"
3  "GGGG"

正常订购方式不起作用。我使用 split 函数来拆分基于数字的排序,按 .. 如何解决这个问题

4

1 回答 1

5

使用您在 LedgerName 上提供的常规订单的数据正在做您想做的事情。
下面是处理稍微复杂一点的数据的版本。

SQL小提琴

MS SQL Server 2008 架构设置

create table YourTable
(
  id int,
  LedgerName varchar(20)
)

insert into YourTable values
(1,  '105 AAA'  ),
(2,  '1020 sss' ),
(3,  ' '        ),
(4,  null       ),
(5,  '0'        ),
(6,  '999 sss'  ),
(7,  '9999 sss' ),
(8,  'GGGG'     ),
(9,  '107 BBB'  ),
(10, 'BBBB'     ),
(11, '101 TTT'  )

查询 1

select id,
       LedgerName
from YourTable
order by case when patindex('%[^0-9]%', isnull(LedgerName, '')+' ') = 1 then 1 else 0 end,
         cast(left(LedgerName, patindex('%[^0-9]%', LedgerName+' ')-1) as int),
         LedgerName

结果

| ID | LEDGERNAME |
-------------------
|  5 |          0 |
| 11 |    101 TTT |
|  1 |    105 AAA |
|  9 |    107 BBB |
|  6 |    999 sss |
|  2 |   1020 sss |
|  7 |   9999 sss |
|  4 |     (null) |
|  3 |            |
| 10 |       BBBB |
|  8 |       GGGG |
于 2012-11-23T07:02:45.110 回答