17

データベースの Interest フィールドを更新したいと考えています。私のSQLクエリは以下のようなものです

Update Table_Name set Interest = Principal * Power(( 1 + (rate / 100),year)

このクエリは MySQL では正常に機能しますが、SQLite では機能しません。

エラーは、電源機能が見つからないことを示しています

一度に3000以上のレコードを更新するには、クエリを使用してこれを行う必要があるため、この問題を解決する方法を知っている人はいますか?

4

8 に答える 8

19

SQLite には、利用できる関数があまりありません。しかし、良いニュースは、独自のものを簡単に追加できることです。

C API (Objective-C コードからも機能します) を使用してそれを行う方法は次のとおりです。

最初に累乗関数を書きます:

void sqlite_power(sqlite3_context *context, int argc, sqlite3_value **argv) {
    double num = sqlite3_value_double(argv[0]); // get the first arg to the function
    double exp = sqlite3_value_double(argv[1]); // get the second arg
    double res = pow(num, exp);                 // calculate the result
    sqlite3_result_double(context, res);        // save the result
}

次に、関数を登録する必要があります。

int res = sqlite3_create_function(dbRef, "POWER", 2, SQLITE_UTF8, NULL, &sqlite_power, NULL, NULL);

2関数の引数の数です。dbRefもちろん、sqlite3 *データベース参照です。

于 2012-11-02T06:03:56.893 に答える
4

https://www.cafe-encounter.net/p3244/installing-and-using-sqlite-extensions-on-macos-and-maybe-windows-linux-too

ステップは、Liam Healy という素晴らしい人物が書いた Math 拡張ライブラリを構築することでした。

ターミナルで次のコマンドを入力します。

ステップ 1) ダウンロード/リンクを開くhttp://sqlite.org/contrib/download/extension-functions.c?get=25

ステップ 2) extension-functions.c がダウンロードされた場所に移動します。コマンドを実行 "gcc -fno-common -dynamiclib extension-functions.c -o libsqlitefunctions.dylib".すると、同じ場所に libsqlitefunctions.dylib ファイルが作成され、xcode から iOS アプリケーションで使用できます。

ココア アプリに以下を追加できます。

“SELECT load_extension(’libsqlitefunctions.dylib’);”

そして、COS、SQRT などのあらゆる種類の素晴らしいメソッドにアクセスできます! 次のようにアプリで使用できます。

//Activate database loading
sqlite3_enable_load_extension(database, 1);
sqlite3_load_extension(database,”libsqlitefunctions.dylib”,0,0);
于 2012-11-02T07:05:23.703 に答える
1
于 2012-11-02T06:01:48.817 に答える