6

我有一个查询,我在 MySQL 数据库上使用,如果可能(当 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 是数据库字段 character(25) 。

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

4

1 回答 1

17

您可以使用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
于 2011-09-02T19:45:22.870 回答