0

日付と FMDB にいくつか問題があります。日付/時間などでグループ化したい日時値を含むレコードがたくさんあります。基本的な sqllite クエリ ツールを使用して、使用する正しい SQL 構文を決定しました。

select strftime('%Y-%m-%d',datetime('2001-01-01',zentrydate || 'seconds','localtime')) as dteEntry...

上記は機能し、返されたデータは正しいです。ただし、FMDB ラッパーを使用して同じことを実行しようとすると、正しい結果が返されません。datetime() 関数を使用して返されたフィールドは、コンソールに出力すると NULL として読み取られます。また、1 つのレコードしか返されないため、クエリも正しく実行されません。正しい結果を返す sqllite ツールを使用して同じクエリを実行できるため、これが正しくないことはわかっています。

誰かが私が何をする必要があるかを理解するのを手伝ってくれますか? 数週間前に FMDB ライブラリをダウンロードしただけなので、比較的新しいバージョンが必要です。

4

2 に答える 2

0

これは古い質問ですが、偶然見つけました。いくつかの考え:

  1. たくさんの日時レコードがあると言うとき、ネイティブの日時データ型がないため、SQLiteのコンテキスト内でそれが何を意味するのかわかりません。(これは、他のSQLエンジンからのSQLiteにアプローチする私たちにとっては異質な概念です。)文字列または数値として格納されます。(SQLiteデータ型を参照してください。)

  2. あなたのzentrydate || 'seconds'「構文から、zentrydateは2001年1月1日からの秒数であると推測しますか?その場合、秒の前にスペースがzentrydate || ' seconds'ありません。たとえば、1/1/からの秒数ではない場合。 2001年、それで私はこれをどうすればいいのかわかりません。とにかく、これは間違いなくFMDBがNULL値を返す原因になります。

  3. の使用を再評価することをお勧めしますlocaltime

結論として、これはFMDBの問題ではなく、より広範なSQLiteの問題であると思われます。それでも問題が解決しない場合は、お知らせください。しかし、あなたは今までにあなたの問題を解決する他の方法を見つけたと確信しています。

于 2012-04-30T22:49:48.060 に答える
0

次のように結果セットを正しく読んでいますか? While ([rs next]) {

于 2011-12-12T22:35:37.870 に答える