Принимается как Int, только когда Character является числом в FireBird 2.5 - PullRequest
5 голосов
/ 02 сентября 2011

У меня есть запрос, который я использую в базе данных 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?

1 Ответ

16 голосов
/ 02 сентября 2011

Вы можете использовать оператор 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
...