订购varchar类型与我在excel中看到的不同

时间:2011-04-05 20:36:13

标签: sql-server-2008

我运行以下查询

CREATE TABLE #Temp
(
    Data VARCHAR(100)
)

INSERT INTO #Temp VALUES ('241.110')
INSERT INTO #Temp VALUES ('1340.306')

SELECT * FROM #Temp ORDER BY Data asc

结果是

  

1340.306
  241.110

当我将excel中的相同数据排序为最小到最大时,它有

  

241.110
  1340.306

在SQL Server中,我需要与excel中相同的顺序。我做错了什么?

2 个答案:

答案 0 :(得分:0)

sql-server中的排序按字母顺序排列,'1'排在'2'之前。

要获得与excel相同的排序,我建议您使用数字字段而不是VARCHAR。

答案 1 :(得分:0)

如果在一列中有混合数字和文本,则可以使用它来对数字的数值进行排序。

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