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

ale*_*oot 5 firebird sql-order-by firebird2.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
Run Code Online (Sandbox Code Playgroud)

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

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

ain*_*ain 16

你可以使用SIMILAR TO运算符,即

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

如果字段有前导或尾随空格,那么你必须使用TRIM()函数去除测试前的那些,即

WHEN TRIM(charfield) SIMILAR TO ...
Run Code Online (Sandbox Code Playgroud)

并且为了允许负数,你必须修改要包含的模式-,即该条款将成为

ORDER BY
   CASE 
      WHEN TRIM(charfield) SIMILAR TO '\-?[0-9]+' ESCAPE '\' THEN CAST(charfield AS INTEGER) 
      ELSE 9999999 
   END
Run Code Online (Sandbox Code Playgroud)