如何按字母顺序然后按数字顺序?

时间:2018-07-31 14:10:14

标签: sql sql-server

在SQL Server中按数字值排序之前,如何按字母顺序对查询结果进行排序?

我的myTable带有要查询的aColumn

我发现了this,它说可以尝试以下操作:

SELECT * FROM dbo.myTable
WHERE aColumn LIKE '%val'
ORDER BY IF(aColumn RLIKE '^[a-z]', 1, 2), aColumn

但这是针对MySQL的,这可能是为什么它在SQL Server中不起作用的原因。使用正则表达式过滤器的SQL Server是否有类似的东西?我收到的错误消息是:

Msg 156, Level 15, State 1, Line 3
Incorrect syntax near the keyword 'IF'
Msg 102, Level 15, State 1, Line 3
Incorrect syntax near 'RLIKE'

我想看的是这样的东西:

Aval
Bval
Cval
1val
2val

而不是

1val
2val
Aval
Bval
Cval

2 个答案:

答案 0 :(得分:2)

您可以使用LIKE谓词:

SELECT m.* 
FROM dbo.myTable m
WHERE aColumn LIKE '%val'
ORDER BY (CASE WHEN aColumn like '[a-z]%' THEN 0 ELSE 1 END), aColumn;

答案 1 :(得分:0)

我猜可能会有一些极端的情况,其中数字可能会显示出来,或者您想通过其他方式进行排序。这是一个应该灵活的解决方案:

DECLARE @TOTALS TABLE
(
  ID INT IDENTITY,
  THEDATA VARCHAR(255)
)

INSERT INTO @TOTALS (THEDATA)
SELECT THEDATA FROM atest 
WHERE THEDATA NOT LIKE '%[0-9]%'
ORDER BY THEDATA ASC

INSERT INTO @TOTALS (THEDATA)
SELECT THEDATA FROM atest 
WHERE THEDATA LIKE '%[0-9]%'
ORDER BY THEDATA ASC

SELECT * FROM @TOTALS
ORDER BY ID ASC

您可以做的是创建table variable并使用各种SELECT语句填充该表。由于它具有IDENTITY列,因此可以跟踪插入的订单商品。然后按该顺序退回SELECT

在这种情况下,我只是将所有没有数字的值放入(已排序),然后将所有确实具有数字的值放入(已排序)。

我希望这会有所帮助:)