轉載:在c#中使用sqlite的3種自定義函式
來源 https://blog.csdn.net/lc156845259/article/details/68944742
自定義函式
有三種型別函式可以自定義,分別是:Scalar,Aggregate,Collation。
Scalar:標量(對單條資料進行計算的函式)
Aggregate:聚合(對多條資料進行計算的函式)
Collation:集合(用於排序)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SQLite;
public class test
{
/// <summary>
/// 求平方根
/// </summary>
[SQLiteFunction(Name = "sqrt", Arguments = 1, FuncType = FunctionType.Scalar)]
public class Sqrt : SQLiteFunction
{
public override object Invoke(object[] args)
{
double d = Convert.ToDouble(args[0]);
return Math.Sqrt(d);
}
}
/// <summary>
/// 求平均
/// </summary>
[SQLiteFunction(Name = "mean", Arguments = -1, FuncType = FunctionType.Aggregate)]
public class Mean : SQLiteFunction
{
int step = 0;
public override void Step(object[] args, int stepNumber, ref object contextData)
{
double sum = Convert.ToDouble(contextData);
sum += Convert.ToDouble(args[0]);
contextData = sum;
step++;
}
public override object Final(object contextData)
{
double sum = Convert.ToDouble(contextData);
double mean = sum / step;
return mean;
}
}
/// <summary>
/// 中文排序
/// </summary>
[SQLiteFunction(FuncType = FunctionType.Collation, Name = "pinyin")]
public class PinYin : SQLiteFunction
{
public override int Compare(string x, string y)
{
return string.Compare(x, y);
}
}
/*
create table student(id int,high int,name varchar(10));
insert into student values(1,100,'張三');
insert into student values(2,10,'李四');
insert into student values(3,50,'王五');
.save d:/test.db
*/
static void Main(string[] args)
{
//註冊自定義函式
SQLiteFunction.RegisterFunction(typeof(Sqrt));
SQLiteFunction.RegisterFunction(typeof(Mean));
SQLiteFunction.RegisterFunction(typeof(PinYin));
using (var connection = new SQLiteConnection(string.Format("Data source={0}", "d:/test.db")))
{
connection.Open();
using (var com = connection.CreateCommand())
{
com.CommandText = "select sqrt(id) as value from student ";
using (SQLiteDataReader dr = com.ExecuteReader())
{
while (dr.Read())
{
double value = Convert.ToDouble(dr["value"]);
Console.WriteLine(value);
}
dr.Close();
}
com.CommandText = "select mean(high) as val from student ";
using (SQLiteDataReader dr = com.ExecuteReader())
{
if (dr.Read())
{
double value = Convert.ToDouble(dr["val"]);
Console.WriteLine(value);
}
dr.Close();
}
com.CommandText = "select name from student ORDER BY name COLLATE pinyin";
using (SQLiteDataReader dr = com.ExecuteReader())
{
while (dr.Read())
{
Console.WriteLine(dr["name"].ToString());
}
dr.Close();
}
}
}
}
}
編譯方法
從http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
下載了http://system.data.sqlite.org/downloads/1.0.112.0/sqlite-netFx40-binary-Win32-2010-1.0.112.0.zip
解壓縮,然後在那個解壓縮目錄執行
c:\Windows\Microsoft.NET\Framework\v4.0.30319\csc ..\sqlite_udf.cs -r:System.Data.SQLite.dll
相關文章
- 在python中使用sqlite的自定義函式功能PythonSQLite函式
- Hive中自定義函式Hive函式
- 自定義跳轉函式的通用unhook方法函式Hook
- matlab自定義函式建立與使用Matlab函式
- MySQL使用之五_自定義函式和自定義過程MySql函式
- FlinkSQL使用自定義UDTF函式行轉列-IK分詞器SQL函式分詞
- Oracle 自定義函式Oracle函式
- shell自定義函式函式
- sqlite中存放自定義表結構的位置SQLite
- Clickhouse 使用者自定義外部函式函式
- sql中select列有自定義函式 dblinkSQL函式
- TDengine 3.0 中如何編譯、建立和使用自定義函式編譯函式
- Hive常用函式及自定義函式Hive函式
- EMQX Cloud 自定義函式實現多種 IoT 資料形式的靈活轉化MQCloud函式
- hive 3.0.0自定義函式Hive函式
- python教程:自定義函式Python函式
- [譯] 為函式自定義屬性的八種實現方法函式
- 影片直播系統原始碼,在Laravel中自定義模板函式 並在模板中呼叫原始碼Laravel函式
- java自定義equals函式和hashCode函式Java函式
- vue 在methods中定義的函式 not definedVue函式
- [提問交流]建議:預載入自定義函式函式
- Shell中函式的定義和使用函式
- 教你認識AWK 使用者自定義函式函式
- PHP 自定義函式用法及常用函式集合PHP函式
- Hive函式(內建函式+自定義標準函式UDF)Hive函式
- Laravel 新增自定義助手函式Laravel函式
- laravel 自定義全域性函式Laravel函式
- Laravel 自定義函式存放位置Laravel函式
- Laravel自定義輔助函式Laravel函式
- FlinkSQL自定義函式開發SQL函式
- apiAutoTest:支援自定義函式,用例中可呼叫API函式
- HIVE自定義函式的擴充套件Hive函式套件
- Hive--->建立自定義的UDTF函式Hive函式
- 請教,blade模板中怎麼呼叫自定義的函式?函式
- 動畫函式的繪製及自定義動畫函式動畫函式
- 在Vue3中實現自定義指令Vue
- SQLite中的SELECT子句使用表示式SQLite
- JavaScript 設計模式系列 – 自定義函式(惰性函式)JavaScript設計模式函式