仅当Character是FireBird 2.5上的数字时才转换为Int

时间:2011-09-02 19:12:52

标签: sql-order-by firebird firebird2.5

我有一个查询,我在MySQL数据库上使用,在可能的情况下(当char字符串为数字时)将char数据库字段转换为整数,所以例如我在mysql上使用的ORDER BY子句是:

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

其中charfield是数据库字段字符(25)。

如何为Firebird 2.5翻译此ORDER BY查询子句?

1 个答案:

答案 0 :(得分:14)

您可以使用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