Преобразование как Int только в том случае, если Character является числом в FireBird 2.5.

У меня есть запрос, который я использую в базе данных MySQL, который упорядочивает результат, приводящий поле базы данных char к целому, когда это возможно (когда строка char является числовой), поэтому, например, предложение ORDER BY, которое я использую в mysql:

ORDER BY
   CASE 
   WHEN CONVERT(charfield, SIGNED INTEGER) IS NOT NULL THEN
        CAST(charfield AS SIGNED INTEGER)  
   ELSE 9999999999 END

Где charfield — символ поля базы данных (25).

Как я могу перевести это предложение ORDER BY Query для Firebird 2.5?


person aleroot    schedule 02.09.2011    source источник


Ответы (1)


Вы можете использовать оператор SIMILAR TO, т.е.

ORDER BY
   CASE 
      WHEN charfield SIMILAR TO '[0-9]+' THEN CAST(charfield AS INTEGER) 
      ELSE 9999999 
   END

Если в поле есть начальные или конечные пробелы, вам нужно использовать функцию TRIM(), чтобы избавиться от них перед тестом, т.е.

WHEN TRIM(charfield) SIMILAR TO ...

И чтобы разрешить отрицательные числа, вы должны изменить шаблон, включив в него -, т. е. предложение станет

ORDER BY
   CASE 
      WHEN TRIM(charfield) SIMILAR TO '\-?[0-9]+' ESCAPE '\' THEN CAST(charfield AS INTEGER) 
      ELSE 9999999 
   END
person ain    schedule 02.09.2011