我在Firebird 2.0表中有一个VARCHAR字段,可以包含字母数字字符。我需要对此字段的数据进行排序,将仅包含数字的所有值排序为数字,并将所有其他值排序为0.
例如,如果我有四个值,
"1", "2", "10", "string",
我需要将其排序为
"string", "1", "2", "10".
字符串排序为
的默认排序"1", "10", "2", "string".
我正在考虑将值转换为INTEGER,但我在字符串上遇到转换错误,这当然是正确的。如何解决这个问题?
答案 0 :(得分:2)
您可以使用内置函数LPAD:
SELECT
...
<number_field>,
...
FROM
...
ORDER BY
LPAD(<numer_field>, 10)
答案 1 :(得分:0)
创建额外的列,使用您的应用程序存储可排序的值。然后根据该列进行排序。 如果您希望您的数字在最后,请在数字前插入“ZZZ”(或“ÜÜÜ”或您语言中的最后一个字符)。像格式(“ZZZ%012d”,my_num);