首页 > 解决方案 > SQL Server Order By Asc 在一个主要存储数字的 varchar 列中

问题描述

VarChar在 SQL Server 中有一个列,其中主要存储数字,但也有一些字符串。我想用

Select column1  
from table 
Order by Column1 Asc

但它按此顺序对数字进行排序

1
10
11
12
19
2
3
4
5
String1
String2
...

我已经在网上搜索了一种方法,推荐的方法是转换为 INT 或执行以下操作:

Select column1 
from table 
Order by Column1 + 0 Asc

但是,这些解决方案对我不起作用,因为我的列中有字符串并且我收到错误:

将 varchar 值 'Damage' 转换为数据类型 int 时转换失败。

标签: sql-servertsql

解决方案


假设你有一个这样的表:

CREATE TABLE #y(i VARCHAR(10))

并且您在其中插入了以下数据:

INSERT INTO #y VALUES('1'),('2'),('10'),('9'),('20'),('ffff'),('aaaa'),('zzzz')

您可以尝试以下查询以根据需要对数据进行正确排序:

SELECT * FROM #y 
ORDER BY CASE ISNUMERIC(i) WHEN 1 THEN CAST(i AS INT) ELSE 99999999999 end ASC, i ASC

您也可以在这里找到许多其他解决此问题的方法。

阅读有关ISNUMERICCASTCASE的更多信息


推荐阅读