Firebird определяет, является ли строка всеми числами
Вопрос
У меня есть поле 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);