如果您在一列中有混合的数字和文本,您可以使用它对数字的数值进行排序。
CREATE TABLE #Temp
(
Data varchar(100)
)
INSERT INTO #Temp VALUES ('241.110')
INSERT INTO #Temp VALUES ('1340.306')
INSERT INTO #Temp VALUES ('b')
INSERT INTO #Temp VALUES ('aa')
INSERT INTO #Temp VALUES ('241.2')
SELECT *
FROM #Temp
ORDER BY
case isnumeric(Data) when 0 then Data end asc,
case isnumeric(Data) when 1 then cast(Data as numeric(10,3)) end asc
结果:
Data
----------
241.110
241.2
1340.306
aa
b
编辑1第二列被处理的方式相同。
SELECT *
FROM #Temp
ORDER BY
case isnumeric(Data) when 0 then Data end asc,
case isnumeric(Data) when 1 then cast(Data as numeric(10,3))end asc,
case isnumeric(Data2) when 0 then Data2 end asc,
case isnumeric(Data2) when 1 then cast(Data2 as numeric(10,3))end asc
嗯,这是暗示,我不知道你可以按顺序做CASE。如果与案例结合使用,我可以按顺序排列多个列,例如,如果我有Data1,Data2列,是否可以以相同的方式检查两者? – 2011-04-05 21:07:20
@palm - 不知道我是否理解你想要的,但你可以有多个列/语句。在我的答案中,有两个句子依次用逗号分隔。第一个返回一个字符串或null,第二个返回一个数字或null。您当然可以在order by子句中添加更多的语句。 – 2011-04-05 21:12:27
对于我的无知感到遗憾,但我们假设我有两列Data1和Data2,如果我想通过CASE检查执行ORDER BY Data1,Data2,您可以通过示例来演示。我正在尝试它,但得到语法错误 – 2011-04-05 21:18:09