2013-01-05 100 views
0

在我的数据库SQLite的我有一个存储为字符串,为什么当我尝试将它们与此查询订单编号的字母顺序

select... order by cast("+filter+" as real) 
订购

这个错误的顺序返回我的号码列浮点数和时间列:

22,5 
    23 
    23,5 
    23 
    23,5 
    24,5 
    24 

或我的时间列也与此顺序错误:

00:56 
00:57 
00:52 
00:46 
+0

您是否尝试过订购它们而不将它们转换为真实的订单,因为字符串可能会工作 –

+0

因此,您在字符串列中有两个非字符串数据类型。你今天过得不好吗? 45:24应该在45.24之前还是之后? –

回答

0

尝试

select... order by cast(replace("+filter+",',','.') as real) 

Sqlite需要点而不是逗号作为分数部分分隔符。它也默默忽略了不可转换的尾巴,所以'24,5'转换为24.0。

从您的时间栏开始,如果您将其排序为字符串,而不是将其转换为浮点型,它将很好地排序。但是如果你想出于某种原因投射它,你可以用冒号变成replace

+0

是的,通过“+过滤器+”asc“命令没有投我的时间和漂浮列好,但没有其他列我有INT(总是存储为字符串)他们显示此序列:10,11,12,9 ...在我的虚拟设备中,我有浮点列,但在我的真实手机点变成了逗号。 – lucignolo

+0

为什么要将整数存储为字符串?(如果sqlite整数太窄,也有可能足够大的bigint)。认为你明白了我的意思:对不同的列使用不同的强制转换(如果有的话),如果你强制转换为浮动状态,请使用替换来修复分隔符。 –

+0

谢谢安东,我将尝试更改我的所有项目以管理int而不是字符串。 – lucignolo