目录
1 核心函数和聚合函数
1.1 核心函数
1.2 聚合函数
2 字符串函数
3 日期和时间函数
4 数学函数
5 JSON函数 (SQLite 3.9.0+)
6 窗口函数 (SQLite 3.25.0+)
7 加密和安全函数
8 其他实用函数
9 C#代码示例:使用SQLite函数
9.1 准备工作
9.2 代码实现
SQLite提供了丰富的内置函数,可用于数据操作、转换和计算。下面将分类详细介绍这些函数,并
通过一个C#代码示例展示如何在应用中使用它们。
函数 | 描述 | 示例 |
---|---|---|
abs(X) |
返回X的绝对值 | SELECT abs(-10) → 10 |
coalesce(X,Y,...) |
返回第一个非NULL值 | SELECT coalesce(NULL, 0, 5) → 0 |
ifnull(X,Y) |
如果X为NULL返回Y,否则返回X | SELECT ifnull(NULL, 'Default') → ‘Default’ |
length(X) |
返回字符串X的长度 | SELECT length('SQLite') → 6 |
max(X,Y,...) |
返回参数中的最大值 | SELECT max(5, 9, 3) → 9 |
min(X,Y,...) |
返回参数中的最小值 | SELECT min(5, 9, 3) → 3 |
nullif(X,Y) |
如果X=Y返回NULL,否则返回X | SELECT nullif(5, 5) → NULL |
random() |
返回随机整数 | SELECT random() → [随机整数] |
round(X) |
四舍五入到最接近的整数 | SELECT round(4.6) → 5 |
round(X,Y) |
四舍五入到Y位小数 | SELECT round(5.678, 1) → 5.7 |
函数 | 描述 | 示例 |
---|---|---|
avg(X) |
返回X的平均值 | SELECT avg(salary) FROM employees |
count(X) |
计数非NULL的X值 | SELECT count(email) FROM users |
count(*) |
计数行数 | SELECT count(*) FROM orders |
group_concat(X) |
将所有X值连接为一个字符串 | SELECT group_concat(name) FROM users |
max(X) |
返回X列中的最大值 | SELECT max(price) FROM products |
min(X) |
返回X列中的最小值 | SELECT min(age) FROM users |
sum(X) |
返回X列的总和 | SELECT sum(amount) FROM transactions |
total(X) |
返回X列的总和(float) | SELECT total(amount) FROM transactions |
函数 | 描述 | 示例 |
---|---|---|
lower(X) |
将X转换为小写 | SELECT lower('SQLite') → ‘sqlite’ |
upper(X) |
将X转换为大写 | SELECT upper('sqlite') → ‘SQLITE’ |
trim(X) |
去除X两端的空白 | SELECT trim(' sqlite ') → ‘sqlite’ |
ltrim(X) |
去除X左侧的空白 | SELECT ltrim(' sqlite') → ‘sqlite’ |
rtrim(X) |
去除X右侧的空白 | SELECT rtrim('sqlite ') → ‘sqlite’ |
substr(X,Y) |
截取X从位置Y开始的子串 | SELECT substr('sqlite', 2) → ‘qlite’ |
substr(X,Y,Z) |
截取X从位置Y开始长度为Z的子串 | SELECT substr('sqlite', 2, 3) → ‘qli’ |
replace(X,Y,Z) |
将X中的Y替换为Z | SELECT replace('sqlite', 'lite', 'BIG') → ‘sqBIG’ |
instr(X,Y) |
返回Y在X中首次出现的位置 | SELECT instr('sqlite', 'it') → 3 |
char(X1,X2...) |
返回ASCII码对应的字符 | SELECT char(83, 81, 76) → ‘SQL’ |
hex(X) |
返回X的十六进制表示 | SELECT hex('SQL') → ‘53514C’ |
quote(X) |
将X包裹在引号中,转义特殊字符 | SELECT quote('O''Brien') → ‘O’‘Brien’ |
glob(X,Y) |
如果Y匹配通配模式X返回1,否则返回0 | SELECT glob('*.txt', 'file.txt') → 1 |
like(X,Y) |
如果Y匹配SQL LIKE模式X返回1 | SELECT like('%lite%', 'sqlite') → 1 |
unicode(X) |
返回X第一个字符的Unicode码点 | SELECT unicode('A') → 65 |
函数 | 描述 | 示例 |
---|---|---|
date(timestring, modifier...) |
返回日期格式 | SELECT date('now') → ‘2023-05-15’ |
time(timestring, modifier...) |
返回时间格式 | SELECT time('now') → ‘15:30:45’ |
datetime(timestring, modifier...) |
返回日期时间格式 | SELECT datetime('now') → ‘2023-05-15 15:30:45’ |
julianday(timestring, modifier...) |
返回儒略日 | SELECT julianday('2023-05-15') → 2460079.5 |
strftime(format, timestring, modifier...) |
按格式化字符串返回日期时间 | SELECT strftime('%Y-%m-%d', 'now') → ‘2023-05-15’ |
常用格式化符号:
%Y
- 年(四位数)
%m
- 月(01-12)
%d
- 日(01-31)
%H
- 小时(00-23)
%M
- 分钟(00-59)
%S
- 秒(00-59)
%W
- 星期几名称
%w
- 星期几数字(0-6,0是星期日)
常用修饰符:
+N days
- 增加N天
+N hours
- 增加N小时
+N minutes
- 增加N分钟
+N months
- 增加N月
+N years
- 增加N年
start of month
- 月初
start of year
- 年初
weekday N
- 最近的星期N(0=星期日)
函数 | 描述 | 示例 |
---|---|---|
abs(X) |
返回X的绝对值 | SELECT abs(-10) → 10 |
random() |
返回随机整数 | SELECT random() → [随机整数] |
round(X) |
四舍五入到最接近的整数 | SELECT round(4.6) → 5 |
round(X,Y) |
四舍五入到Y位小数 | SELECT round(5.678, 1) → 5.7 |
ceil(X) |
向上取整 | SELECT ceil(4.1) → 5 |
floor(X) |
向下取整 | SELECT floor(4.9) → 4 |
power(X,Y) |
X的Y次方 | SELECT power(2, 3) → 8 |
sqrt(X) |
X的平方根 | SELECT sqrt(9) → 3 |
exp(X) |
e的X次方 | SELECT exp(1) → 2.71828… |
log(X) |
X的自然对数 | SELECT log(10) → 2.30258… |
log10(X) |
X的以10为底的对数 | SELECT log10(100) → 2 |
mod(X,Y) |
X除以Y的余数 | SELECT mod(10, 3) → 1 |
pi() |
返回圆周率π | SELECT pi() → 3.14159… |
sign(X) |
X的符号(-1, 0, 或 1) | SELECT sign(-15) → -1 |
cos(X) |
X的余弦(X为弧度) | SELECT cos(0) → 1 |
sin(X) |
X的正弦(X为弧度) | SELECT sin(pi()/2) → 1 |
tan(X) |
X的正切(X为弧度) | SELECT tan(0) → 0 |
acos(X) |
X的反余弦 | SELECT acos(1) → 0 |
asin(X) |
X的反正弦 | SELECT asin(1) → 1.5707… |
atan(X) |
X的反正切 | SELECT atan(1) → 0.7853… |
atan2(Y,X) |
Y/X的反正切 | SELECT atan2(1, 1) → 0.7853… |
函数 | 描述 | 示例 |
---|---|---|
json(X) |
验证X是否为有效JSON | SELECT json('{"name":"John"}') → ‘{“name”:“John”}’ |
json_array(X,Y...) |
创建JSON数组 | SELECT json_array(1, 2, 'three') → ‘[1,2,“three”]’ |
json_object(K,V,...) |
创建JSON对象 | SELECT json_object('name', 'John') → ‘{“name”:“John”}’ |
json_extract(X,P) |
从JSON中提取值 | SELECT json_extract('{"name":"John"}', '$.name') → ‘John’ |
json_type(X,P) |
返回JSON值的类型 | SELECT json_type('{"name":"John"}', '$.name') → ‘text’ |
json_insert(X,P,V,...) |
如果路径不存在则插入 | SELECT json_insert('{"a":2}', '$.b', 5) → ‘{“a”:2,“b”:5}’ |
json_replace(X,P,V,...) |
如果路径存在则替换 | SELECT json_replace('{"a":2}', '$.a', 5) → ‘{“a”:5}’ |
json_set(X,P,V,...) |
插入或替换值 | SELECT json_set('{"a":2}', '$.a', 5) → ‘{“a”:5}’ |
json_remove(X,P,...) |
移除指定路径 | SELECT json_remove('{"a":2,"b":3}', '$.a') → ‘{“b”:3}’ |
json_valid(X) |
检查X是否为有效JSON | SELECT json_valid('{"a":2}') → 1 |
json_array_length(X) |
返回JSON数组长度 | SELECT json_array_length('[1,2,3]') → 3 |
json_each(X) |
枚举JSON对象中的每个键值对 | SELECT * FROM json_each('{"a":1,"b":2}') |
json_tree(X) |
迭代JSON结构的每个元素 | SELECT * FROM json_tree('{"a":1,"b":[2,3]}') |
函数 | 描述 | 示例 |
---|---|---|
row_number() |
返回结果集中行的序号 | SELECT row_number() OVER (ORDER BY name) |
rank() |
返回排名(有间隔) | SELECT rank() OVER (ORDER BY score DESC) |
dense_rank() |
返回排名(无间隔) | SELECT dense_rank() OVER (ORDER BY score DESC) |
percent_rank() |
返回百分比排名 | SELECT percent_rank() OVER (ORDER BY score) |
first_value(X) |
返回窗口框架第一行的X值 | SELECT first_value(name) OVER (ORDER BY score DESC) |
last_value(X) |
返回窗口框架最后一行的X值 | SELECT last_value(name) OVER (ORDER BY score DESC) |
nth_value(X,N) |
返回窗口框架第N行的X值 | SELECT nth_value(name, 2) OVER (ORDER BY score DESC) |
lead(X,N,DEFAULT) |
返回当前行后N行的X值 | SELECT lead(score, 1, 0) OVER (ORDER BY score) |
lag(X,N,DEFAULT) |
返回当前行前N行的X值 | SELECT lag(score, 1, 0) OVER (ORDER BY score) |
ntile(N) |
将行分为N个等分组 | SELECT ntile(4) OVER (ORDER BY score) |
函数 | 描述 | 示例 |
---|---|---|
randomblob(N) |
返回N字节的随机BLOB | SELECT hex(randomblob(4)) |
zeroblob(N) |
返回N字节的零值BLOB | SELECT length(zeroblob(10)) → 10 |
hex(X) |
返回X的十六进制表示 | SELECT hex('ABC') → ‘414243’ |
unhex(X) |
将十六进制字符串转换为BLOB | SELECT unhex('414243') → ‘ABC’ |
sha1(X) |
返回X的SHA1哈希 | SELECT hex(sha1('password')) |
sha256(X) |
返回X的SHA256哈希 | SELECT hex(sha256('password')) |
sha512(X) |
返回X的SHA512哈希 | SELECT hex(sha512('password')) |
md5(X) |
返回X的MD5哈希 | SELECT hex(md5('password')) |
注意:某些哈希函数可能需要SQLite扩展支持。
函数 | 描述 | 示例 |
---|---|---|
typeof(X) |
返回X的数据类型 | SELECT typeof(123) → ‘integer’ |
changes() |
返回最近修改的行数 | SELECT changes() |
total_changes() |
返回自连接以来修改的总行数 | SELECT total_changes() |
last_insert_rowid() |
返回最后一次插入的ROWID | SELECT last_insert_rowid() |
sqlite_version() |
返回SQLite库版本 | SELECT sqlite_version() |
首先,你需要安装SQLite的C#驱动。在Visual Studio中,通过NuGet包管理器安装
System.Data.SQLite
或Microsoft.Data.Sqlite
包。
// 使用NuGet包管理器控制台安装
// Install-Package System.Data.SQLite
// 或者
// Install-Package Microsoft.Data.Sqlite
下面通过C#示例展示如何在代码中使用这些SQLite函数:
1.SetupExampleData() 创建数据表,并添加与插入内容
2.DemoCoreAndAggregateFunctions() 创建核心和聚合函数
3.DemoStringFunctions() 创建字符串函数
4.DemoDateTimeFunctions() 创建日期时间函数
5.DemoMathFunctions() 创建基本的数学函数
6.DemoJsonFunctions() 创建JSON函数
using System;
using System.Data.SQLite;
using System.IO;
namespace SQLiteFunctionsDemo
{
class Program
{
private static string dbFile = "functions_demo.db";
private static string connectionString = $"Data Source={dbFile};Version=3;";
static void Main(string[] args)
{
try
{
// 确保数据库文件存在
if (!File.Exists(dbFile))
{
SQLiteConnection.CreateFile(dbFile);
}
// 创建示例数据
SetupExampleData();
// 演示不同类型的函数
DemoCoreAndAggregateFunctions();
DemoStringFunctions();
DemoDateTimeFunctions();
DemoMathFunctions();
DemoJsonFunctions();
DemoWindowFunctions();
DemoCustomFunctions();
Console.WriteLine("所有函数演示已完成!");
}
catch (Exception ex)
{
Console.WriteLine($"发生错误: {ex.Message}");
}
Console.ReadKey();
}
static void SetupExampleData()
{
using (var connection = new SQLiteConnection(connectionString))
{
connection.Open();
// 创建产品表
ExecuteNonQuery(connection, @"
CREATE TABLE IF NOT EXISTS Products (
ProductId INTEGER PRIMARY KEY,
Name TEXT NOT NULL,
Category TEXT,
Price REAL,
Stock INTEGER,
LastUpdated TEXT DEFAULT CURRENT_TIMESTAMP,
Metadata TEXT
)");
// 创建销售表
ExecuteNonQuery(connection, @"
CREATE TABLE IF NOT EXISTS Sales (
SaleId INTEGER PRIMARY KEY,
ProductId INTEGER,
Quantity INTEGER,
SaleDate TEXT,
Total REAL,
FOREIGN KEY (ProductId) REFERENCES Products(ProductId)
)");
// 清空数据以便重复运行
ExecuteNonQuery(connection, "DELETE FROM Sales");
ExecuteNonQuery(connection, "DELETE FROM Products");
// 插入产品数据
ExecuteNonQuery(connection, @"
INSERT INTO Products (ProductId, Name, Category, Price, Stock, Metadata) VALUES
(1, '苹果手机', '电子产品', 6999.00, 100, '{"color":"black","storage":"128GB","warranty":"1年"}'),
(2, '笔记本电脑', '电子产品', 5999.00, 50, '{"color":"silver","cpu":"i5","ram":"8GB"}'),
(3, '蓝牙耳机', '配件', 299.00, 200, '{"color":"white","battery":"20小时","type":"TWS"}'),
(4, '智能手表', '电子产品', 1999.00, 75, '{"color":"black","screen":"AMOLED","battery":"5天"}'),
(5, '移动电源', '配件', 99.00, 300, '{"capacity":"10000mAh","ports":2,"fastCharge":true}')");
// 插入销售数据
ExecuteNonQuery(connection, @"
INSERT INTO Sales (ProductId, Quantity, SaleDate, Total) VALUES
(1, 2, '2023-01-15', 13998.00),
(3, 5, '2023-01-20', 1495.00),
(2, 1, '2023-02-05', 5999.00),
(4, 3, '2023-02-10', 5997.00),
(5, 10, '2023-02-15', 990.00),
(1, 1, '2023-03-01', 6999.00),
(3, 2, '2023-03-10', 598.00),
(2, 2, '2023-03-15', 11998.00),
(4, 1, '2023-03-20', 1999.00),
(5, 5, '2023-03-25', 495.00)");
}
}
static void DemoCoreAndAggregateFunctions()
{
Console.WriteLine("\n=== 核心和聚合函数 ===");
using (var connection = new SQLiteConnection(connectionString))
{
connection.Open();
// 核心函数
Console.WriteLine("核心函数示例:");
DisplayValue(connection, "SELECT abs(-15)", "abs(-15)");
DisplayValue(connection, "SELECT coalesce(NULL, 'N/A', 'Data')", "coalesce(NULL, 'N/A', 'Data')");
DisplayValue(connection, "SELECT max(10, 5, 20, 15)", "max(10, 5, 20, 15)");
DisplayValue(connection, "SELECT round(123.456, 1)", "round(123.456, 1)");
// 聚合函数
Console.WriteLine("\n聚合函数示例:");
DisplayValue(connection, "SELECT count(*) FROM Products", "产品总数");
DisplayValue(connection, "SELECT avg(Price) FROM Products", "平均价格");
DisplayValue(connection, "SELECT sum(Total) FROM Sales", "销售总额");
DisplayValue(connection, "SELECT max(Price) FROM Products", "最高产品价格");
DisplayValue(connection, "SELECT min(Price) FROM Products", "最低产品价格");
DisplayValue(connection, "SELECT group_concat(Name, ', ') FROM Products", "所有产品名称");
// 分组聚合
Console.WriteLine("\n分组聚合示例:");
string groupByQuery = @"
SELECT Category,
count(*) AS ProductCount,
avg(Price) AS AvgPrice,
sum(Stock) AS TotalStock
FROM Products
GROUP BY Category";
DisplayQueryResults(connection, groupByQuery);
}
}
static void DemoStringFunctions()
{
Console.WriteLine("\n=== 字符串函数 ===");
using (var connection = new SQLiteConnection(connectionString))
{
connection.Open();
Console.WriteLine("字符串函数示例:");
DisplayValue(connection, "SELECT upper('sqlite')", "upper('sqlite')");
DisplayValue(connection, "SELECT lower('SQLite')", "lower('SQLite')");
DisplayValue(connection, "SELECT length('SQLite数据库')", "length('SQLite数据库')");
DisplayValue(connection, "SELECT substr('SQLite数据库', 7, 3)", "substr('SQLite数据库', 7, 3)");
DisplayValue(connection, "SELECT replace('SQLite是很好的数据库', '很好', '非常优秀')",
"replace('SQLite是很好的数据库', '很好', '非常优秀')");
DisplayValue(connection, "SELECT instr('SQLite数据库', '数据')", "instr('SQLite数据库', '数据')");
DisplayValue(connection, "SELECT trim(' SQLite ')", "trim(' SQLite ')");
// 在表数据上使用字符串函数
Console.WriteLine("\n在表数据上使用字符串函数:");
string stringFuncQuery = @"
SELECT Name,
upper(Category) AS CategoryUpper,
length(Name) AS NameLength,
substr(Name, 1, 2) AS NamePrefix
FROM Products";
DisplayQueryResults(connection, stringFuncQuery);
// 字符串模式匹配
Console.WriteLine("\n字符串模式匹配:");
DisplayQueryResults(connection, "SELECT Name FROM Products WHERE Name LIKE '%手%'");
}
}
static void DemoDateTimeFunctions()
{
Console.WriteLine("\n=== 日期时间函数 ===");
using (var connection = new SQLiteConnection(connectionString))
{
connection.Open();
Console.WriteLine("当前日期时间:");
DisplayValue(connection, "SELECT date('now', 'localtime')", "今天日期");
DisplayValue(connection, "SELECT time('now', 'localtime')", "当前时间");
DisplayValue(connection, "SELECT datetime('now', 'localtime')", "当前日期时间");
DisplayValue(connection, "SELECT strftime('%Y年%m月%d日 %H:%M', 'now', 'localtime')", "格式化日期时间");
Console.WriteLine("\n日期计算:");
DisplayValue(connection, "SELECT date('now', '+7 days', 'localtime')", "7天后");
DisplayValue(connection, "SELECT date('now', '+1 month', 'localtime')", "1个月后");
DisplayValue(connection, "SELECT date('now', '+1 year', 'start of month', 'localtime')", "明年当月第一天");
DisplayValue(connection, "SELECT strftime('%w', 'now', 'localtime')", "今天是星期几(0=周日)");
DisplayValue(connection, "SELECT (julianday('now') - julianday('2023-01-01'))", "今年已过天数");
// 日期时间查询
Console.WriteLine("\n日期时间查询示例:");
string dateQuery = @"
SELECT strftime('%Y-%m', SaleDate) AS Month,
sum(Total) AS MonthlyTotal
FROM Sales
GROUP BY Month
ORDER BY Month";
DisplayQueryResults(connection, dateQuery);
// 计算两个日期之间的销售额
Console.WriteLine("\n2023年第一季度销售额:");
string salesQuery = @"
SELECT sum(Total) AS Q1Sales
FROM Sales
WHERE SaleDate BETWEEN '2023-01-01' AND '2023-03-31'";
DisplayQueryResults(connection, salesQuery);
}
}
static void DemoMathFunctions()
{
Console.WriteLine("\n=== 数学函数 ===");
using (var connection = new SQLiteConnection(connectionString))
{
connection.Open();
Console.WriteLine("基本数学函数:");
DisplayValue(connection, "SELECT abs(-42)", "abs(-42)");
DisplayValue(connection, "SELECT round(3.14159, 2)", "round(3.14159, 2)");
DisplayValue(connection, "SELECT floor(9.8)", "floor(9.8)");
DisplayValue(connection, "SELECT ceil(9.2)", "ceil(9.2)");
DisplayValue(connection, "SELECT power(2, 10)", "power(2, 10)");
DisplayValue(connection, "SELECT sqrt(144)", "sqrt(144)");
Console.WriteLine("\n三角函数:");
DisplayValue(connection, "SELECT sin(radians(30))", "sin(30°)");
DisplayValue(connection, "SELECT cos(radians(60))", "cos(60°)");
DisplayValue(connection, "SELECT tan(radians(45))", "tan(45°)");
Console.WriteLine("\n应用于表数据的数学函数:");
string mathQuery = @"
SELECT
Name,
Price,
round(Price * 0.9, 2) AS DiscountPrice,
round(Price * 1.13, 2) AS PriceWithTax,
Stock,
Stock * Price AS Inventory Value
FROM Products";
DisplayQueryResults(connection, mathQuery);
// 随机数应用
Console.WriteLine("\n随机数应用示例:");
DisplayValue(connection, "SELECT random()", "random()");
DisplayValue(connection, "SELECT abs(random()) % 100", "随机数(0-99)");
// 随机选择产品
string randomProductQuery = @"
SELECT Name FROM Products
ORDER BY random()
LIMIT 1";
DisplayValue(connection, randomProductQuery, "随机产品");
}
}
static void DemoJsonFunctions()
{
Console.WriteLine("\n=== JSON函数 ===");
using (var connection = new SQLiteConnection(connectionString))
{
connection.Open();
try
{
// 基本JSON函数
Console.WriteLine("基本JSON函数:");
DisplayValue(connection, "SELECT json_valid('{\"name\":\"John\"}')", "json_valid检查");
DisplayValue(connection, "SELECT json_extract('{\"name\":\"John\",\"age\":30}', '$.name')", "提取name值");
DisplayValue(connection, "SELECT json_extract('{\"name\":\"John\",\"age\":30}', '$.age')", "提取age值");
// 使用 -> 运算符简化JSON提取
DisplayValue(connection, "SELECT '{\"name\":\"John\",\"age\":30}' -> '$.name'", "使用->运算符");
// JSON数组处理
DisplayValue(connection, "SELECT json_array_length('[1,2,3,4]')", "JSON数组长度");
DisplayValue(connection, "SELECT json_extract('[1,2,3,4]', '$[1]')", "提取数组元素
代码建立了一个SQLite数据库,创建了产品和销售表,用示例数据填充它们,然后通过几个方法演
示了不同类型的SQLite函数。
主要由以下构成:
- 数据库设置:创建SQLite数据库文件和必要的表
- 示例数据创建:用产品和销售数据填充表
- 函数演示:单独的方法来展示不同类别的SQLite函数:
- 核心和聚合函数(COUNT、AVG、SUM等)
- 字符串操作函数
- 日期/时间函数
- 数学函数
- JSON函数
以上就是SQLite函数的相关内容,内容不全,大家相互补充!!下一节将为大家介绍如何使用
C#.NET操作 SQLite基本使用示例,敬请期待吧。