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)