Firebird определяет, является ли строка всеми числами - PullRequest
1 голос
/ 09 марта 2009

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

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

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

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 09 марта 2009

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

SELECT
  ...
  <number_field>,
  ...
FROM
  ...
ORDER BY
  LPAD(<numer_field>, 10)
0 голосов
/ 09 марта 2009

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

...