私はSqliteの初心者であり、必要なもののクエリをまとめるのに苦労しています。:-(誰か助けてくれませんか?
日付があります。以下の私の例では、この変数は「givenDate」と呼ばれ、JavaタイプはDateであるため、 yyyy-MM-ddの形式になっています。
また、 「ID 」列と「日付」列を持つ「main」というデータベーステーブルもあります。日付列のエントリは、ISO標準の文字列形式です。したがって、エントリは次のようになります。
ID Date
001 1949-08-13 06:29:21.000
002 1943-08-13 10:13:45.000
003 1948-08-13 09:12:32.100
004 etc.
日付列を指定された日付「givenDate」と比較するときに、テーブル「main」から最も近い10個の日付のリストを取得する必要があります。
だから私はする必要があります:
- [日付]列の各日付を、指定した日付'givenDate'と比較します
- それらの間の絶対差を計算します
- 違いの小さいものから大きいものの順に並べてください
- 最小の10件の結果のそれぞれのIDと日付を返します
したがって、givenDateが1948-09-13の場合、結果は次のようになります。
003 1948-08-13 09:12:32.100
001 1949-08-13 06:29:21.000
002 1943-08-13 10:13:45.000
etc
データベースはSqliteデータベースであるため、DateDiffはAndroidでは機能しません。
私はこのようなことをしようとしました:
String query =
"SELECT ID, Date" +
"FROM main" +
"WHERE Date IS NOT NULL" +
"ORDER BY ABS(date("+givenDate+") - Date) ASC" +
"LIMIT 10";
これはうまくいかないようです。与えられた日付の年と同じ年の日付のリストを昇順で取得します。日付の差は、実際には日付の差を計算して、最も近い10を与えるようには見えません。
たくさんの投稿を調べましたが、必要なことを行うための具体的なものが見つかりません。
どんな助けでも大歓迎です。
ありがとう、シミー:-)
答えは:
Format sqliteDateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
String query2 =
"SELECT _id, Date " +
"FROM main " +
"WHERE Date IS NOT NULL " +
"ORDER BY ABS(JULIANDAY('" + sqliteDateFormatter.format(aDate) + "') - " + "JULIANDAY(Date)) " +
"LIMIT 10";