简体   繁体   English

SQLite Min,Max在ado.net中返回错误结果

[英]Sqlite min,max return wrong result in ado.net

i am using ADO.NET Data Provider for SQLite: 1.0.82.0 我正在ADO.NET Data Provider for SQLite: 1.0.82.0使用ADO.NET Data Provider for SQLite: 1.0.82.0

Aggregate function returns wrong result: 聚合函数返回错误结果:

###Table structure###
CREATE TABLE ta85 (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, date INTEGER, _90 REAL, _100 REAL)

###Rows: ###
select * from ta85

id, date, _90, _100

"1","1355480577920","4,4","2"

"2","1355480877929","15","5,2"

"3","1355481177937","26,4","9,4"

------------------

Now if i want to select the max, min values for each column: 现在,如果我想为每一列选择最大值,最小值:

SELECT date,MIN(_90), MAX(_90),MIN(_100), MAX(_100) FROM ta85 WHERE date between 1355480296794 and 1355481366266

returns: 返回:

"1355481177937","15","4,4","2","9,4" 

which for column _100 is correct but for column _90 is wrong. _100列正确,但_90列错误。

Solution

Thanks for all your answers. 感谢您的所有答复。 you were both right. 你们都是对的。

cmd.Parameters.AddWithValue(columname,"");

to

cmd.Parameters.AddWithValue(columname,0.0d);

You're using the wrong kind of literal to insert floating point numbers into the database, and you're getting string comparisons. 您使用错误的文字类型将浮点数插入数据库中,并且正在进行字符串比较。 Use dots instead of commas. 使用点而不是逗号。

Remember that SQLite is very loose with types : 请记住,SQLite的类型非常松散

SQLite uses a more general dynamic type system. SQLite使用更通用的动态类型系统。 In SQLite, the datatype of a value is associated with the value itself, not with its container. 在SQLite中,值的数据类型与值本身(而不是其容器)相关联。

SQL Fiddle here . SQL Fiddle 在这里

It appears you are comparing strings instead of numbers. 看来您是在比较字符串而不是数字。 Perhaps format your number as '4.4' instead of the '4,4' 也许将您的电话号码格式设置为“ 4.4”,而不是“ 4,4”

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM