Вопрос

У меня есть поле VARCHAR в таблице Firebird 2.0, которое может содержать буквенно-цифровые символы. Мне нужно отсортировать данные в этом поле, отсортировав все значения, которые содержат только числа в виде чисел, и отсортировать все остальные значения как 0.

Например, если у меня есть четыре значения,

"1", "2", "10", "string", 

Мне нужно отсортировать его как

"string", "1", "2", "10". 

Сортировка по умолчанию со строковыми сортировками как

"1", "10", "2", "string".

Я думал о приведении значений к INTEGER, но получаю ошибку преобразования строк, что, конечно, правильно. Как обойти это?

Это было полезно?

Решение

Вы можете использовать встроенную функцию LPAD:

SELECT
  ...
  <number_field>,
  ...
FROM
  ...
ORDER BY
  LPAD(<numer_field>, 10)

Другие советы

Создайте дополнительный столбец, в котором вы храните сортируемые значения, используя ваше приложение. Затем выполните сортировку на основе этого столбца. Если вы хотите, чтобы ваши номера были в конце, вставьте " ZZZ " (или "& # 220; & # 220; & # 220;" или любой последний символ на вашем языке) перед цифрами. Подобный формат (" ZZZ% 012d " ;, my_num);

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top