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)