在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
答案 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
!
在这种情况下,我只是将所有没有数字的值放入(已排序),然后将所有确实具有数字的值放入(已排序)。
我希望这会有所帮助:)