我试图从一个sqlite数据库的列中获取最长的字符串。
Cursor c = db.getLongest();
String c1 = c.getString(0);
String c2 = c.getString(1);
Log.v("longest name", "longest name: " + c1 + " ~ " + c2 + " ~ " + c.getCount());
public Cursor getLongest() {
String sql ="SELECT '_name', LENGTH('_name') count FROM 'tblMain' ORDER BY LENGTH('_name') DESC LIMIT 1;";
Cursor cur = db.rawQuery(sql, null);
if (cur != null) {
cur.moveToFirst();
}
return cur;
}
上面的代码将打印“longest name:_name ~ 5 ~ 1”。它返回的是列名而不是单元格值。
编辑:我也试过
String sql ="SELECT MAX(LENGTH(_name)) FROM tblMain;";
这将给予我最长的长度,但我真的很想得到字符串或至少行的_id。
1条答案
按热度按时间30byixjq1#
上面的代码将打印“longest name:_name ~ 5 ~ 1”。它在返回纵队
它并不是真的返回列。它返回文字值***_name***,因此长度为5,因为它是文字的长度。这是因为该值用单引号括起来。
删除列名前后的单引号。但是,如果两行的值长度相同,该怎么办?(修辞-见下面的演示)。
您可能希望考虑以下查询***(注意已使用额外的列,以便可以如下所示的结果,您可能希望省略,重新排序或调整代码以满足您的要求)***:-
这将返回一个单行 (由于使用了
GROUP BY
和WHERE
子句来确定最长值的长度),其中所有列都来自最长的一行,此外:-Demo
以下是在SQLite工具中使用的:
结果是:
*ID列是其中一行的id,因为在_name列中选择了3行具有相同长度,即(aaaa 4,bbb 4和另一个aaaa 4)
*_count列为3,因为组中有3行具有最长值
*_nameLength列为5,因为这是_name列中最长值的长度
*valuesCSV列是与最长值的长度匹配的所有行的CSV。
如果一行被插入值为***zzzzz 5***(即只有一行长度为6),那么输出将是:
附言
从任何返回Cursor的SQLiteDatabase方法返回的Cursor将NEVER为null。