我有一个查询,我在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
查询子句?
答案 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