упорядочение типа переменной отличается от того, что я вижу в Excel

#sql-server-2008

#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. Что я делаю не так?

Ответ №1:

Если у вас смешаны цифры и текст в одном столбце, вы могли бы использовать это для сортировки по числовым значениям для цифр.

 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
  

Комментарии:

1. хм, это интересно, я не знал, что вы можете использовать регистр по порядку. Могу ли я упорядочивать несколько столбцов по порядку в сочетании с регистром, например, если у меня есть столбцы Data1, Data2, могу ли я проверить наличие обоих одинаковым образом?

2. @palm — Не уверен, понимаю ли я, чего вы хотите, но у вас может быть более одного столбца / оператора в порядке. В моем ответе есть два оператора по порядку, разделенные запятой. Первый возвращает строку или null, второй возвращает числовое значение или null. Вы, конечно, можете добавить больше инструкций в предложение order by.

3. извините за мое невежество, но, допустим, у меня есть два столбца Data1 и Data2, и если я хочу выполнить ПОРЯДОК ПО Data1, Data2 by с проверкой РЕГИСТРА, которую вы можете показать на примере. Я пытаюсь это сделать, но получаю синтаксические ошибки

4. @palm — Добавлена версия, в которой у вас есть столбец Date2, который обрабатывается так же, как и порядок вторичной сортировки.

Ответ №2:

Сортировка в sql-server выполняется в алфавитном порядке, а ‘1’ предшествует ‘2’.

Чтобы получить тот же вид, что и в Excel, я предлагаю вам использовать числовое поле вместо VARCHAR.