Firebird определяет, состоит ли строка из чисел

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

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

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

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

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

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

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

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


person Rytis    schedule 09.03.2009    source источник


Ответы (2)


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

SELECT
  ...
  <number_field>,
  ...
FROM
  ...
ORDER BY
  LPAD(<numer_field>, 10)
person Andrej Kirejeŭ    schedule 09.03.2009

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

person Riho    schedule 09.03.2009