【发布时间】:2021-09-03 02:48:43
【问题描述】:
我对排序顺序有疑问,结果是在字母表之前列出了 0 和 00 REVISION 值。我希望首先对字母进行排序,然后再对数字进行排序。这意味着 0 和 00 应该在字母之后。除了 0, 00 以外的所有其他排序都是正确的。
我使用以下 sql 查询:
SELECT D.PRIO, D.REVISION, ROW_NUMBER() OVER(ORDER BY PRIO, REVISION ) RN FROM (
SELECT DISTINCT CONVERT(INT, LEFT(REVISION, PATINDEX('%[^0-9]%', REVISION+'z')-1)) 'PRIO',REVISION FROM DOCUMENTS )D
ORDER BY D.PRIO,D.REVISION ;
上述查询的结果在字母前显示 0 和 00。
| PRIO | REVISION | RN |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 00 | 2 |
| 0 | A | 3 |
| 0 | a | 4 |
| 0 | B | 5 |
| 0 | b | 6 |
| 0 | C | 7 |
| 0 | c | 8 |
| 0 | D | 9 |
| 0 | d | 10 |
| 0 | E | 11 |
| 0 | e | 12 |
| 0 | F | 13 |
| 0 | f | 14 |
| 0 | G | 15 |
| 0 | g | 16 |
| 0 | H | 17 |
| 0 | h | 18 |
| 0 | I | 19 |
| 0 | i | 20 |
| 0 | J | 21 |
| 0 | K | 22 |
| 0 | L | 23 |
| 0 | M | 24 |
| 0 | P | 25 |
| 0 | R | 26 |
| 0 | S | 27 |
| 0 | SU | 28 |
| 0 | X | 29 |
| 0 | XX | 30 |
| 0 | Y | 31 |
| 1 | 01 | 32 |
| 1 | 1 | 33 |
| 1 | 1A | 34 |
| 2 | 02 | 35 |
| 2 | 2 | 36 |
| 2 | 2. | 37 |
| 3 | 03 | 38 |
| 3 | 3 | 39 |
| 4 | 04 | 40 |
| 4 | 4 | 41 |
| 5 | 05 | 42 |
| 5 | 5 | 43 |
| 6 | 06 | 44 |
| 6 | 6 | 45 |
| 7 | 07 | 46 |
| 7 | 7 | 47 |
| 8 | 08 | 48 |
| 8 | 8 | 49 |
| 9 | 09 | 50 |
| 9 | 9 | 51 |
| 10 | 10 | 52 |
| 11 | 11 | 53 |
| 12 | 12 | 54 |
| 13 | 13 | 55 |
【问题讨论】:
-
您的问题是明确表示
1已正确排序,但0未正确排序。
标签: sql sql-server sorting alphanumeric