当前位置: 首页 > news >正文

SQLite基本函数

目录

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#代码示例展示如何在应用中使用它们。

1 核心函数和聚合函数

1.1 核心函数

函数描述示例
abs(X)返回X的绝对值SELECT abs(-10) → 10
coalesce(X,Y,...)返回第一个非NULL值SELECT coalesce(NULL, 0, 5) → 0
ifnull(X,Y)如果X为NULL返回Y,否则返回XSELECT 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,否则返回XSELECT 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

1.2 聚合函数

函数描述示例
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

2  字符串函数

函数描述示例
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替换为ZSELECT 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,否则返回0SELECT glob('*.txt', 'file.txt') → 1
like(X,Y)如果Y匹配SQL LIKE模式X返回1SELECT like('%lite%', 'sqlite') → 1
unicode(X)返回X第一个字符的Unicode码点SELECT unicode('A') → 65

3 日期和时间函数

函数描述示例
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=星期日)

4  数学函数

函数描述示例
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…

5 JSON函数 (SQLite 3.9.0+)

函数描述示例
json(X)验证X是否为有效JSONSELECT 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是否为有效JSONSELECT 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]}')

6 窗口函数 (SQLite 3.25.0+)

函数描述示例
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)

7 加密和安全函数

函数描述示例
randomblob(N)返回N字节的随机BLOBSELECT hex(randomblob(4))
zeroblob(N)返回N字节的零值BLOBSELECT length(zeroblob(10)) → 10
hex(X)返回X的十六进制表示SELECT hex('ABC') → ‘414243’
unhex(X)将十六进制字符串转换为BLOBSELECT 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扩展支持。

8 其他实用函数

函数描述示例
typeof(X)返回X的数据类型SELECT typeof(123) → ‘integer’
changes()返回最近修改的行数SELECT changes()
total_changes()返回自连接以来修改的总行数SELECT total_changes()
last_insert_rowid()返回最后一次插入的ROWIDSELECT last_insert_rowid()
sqlite_version()返回SQLite库版本SELECT sqlite_version()

9 C#代码示例:使用SQLite函数

9.1 准备工作

首先,你需要安装SQLite的C#驱动。在Visual Studio中,通过NuGet包管理器安装

System.Data.SQLiteMicrosoft.Data.Sqlite包。

// 使用NuGet包管理器控制台安装
// Install-Package System.Data.SQLite
// 或者
// Install-Package Microsoft.Data.Sqlite

9.2 代码实现

下面通过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 TotalStockFROM ProductsGROUP 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 NamePrefixFROM 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 MonthlyTotalFROM SalesGROUP BY MonthORDER BY Month";DisplayQueryResults(connection, dateQuery);// 计算两个日期之间的销售额Console.WriteLine("\n2023年第一季度销售额:");string salesQuery = @"SELECT sum(Total) AS Q1SalesFROM SalesWHERE 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 ValueFROM 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 ProductsORDER 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函数。

主要由以下构成:

  1. 数据库设置:创建SQLite数据库文件和必要的表
  2. 示例数据创建:用产品和销售数据填充表
  3. 函数演示:单独的方法来展示不同类别的SQLite函数:
    • 核心和聚合函数(COUNT、AVG、SUM等)
    • 字符串操作函数
    • 日期/时间函数
    • 数学函数
    • JSON函数

 以上就是SQLite函数的相关内容,内容不全,大家相互补充!!下一节将为大家介绍如何使用

C#.NET操作 SQLite基本使用示例,敬请期待吧。


相关文章:

  • 在 PyTorch 中借助 GloVe 词嵌入完成情感分析
  • Linux进程8-共享内存概念机操作、shmget/shmat/shmdt/shmctl函数用法、空间大小修改
  • 普通IT的股票交易成长史--20250506午复盘
  • JVM内存模型深度解剖:分代策略、元空间与GC调优实战
  • JVM——垃圾回收
  • git的push.default配置详解
  • 使用蚁群算法求解VRPTW问题
  • debian中笔记本的省电选择auto-cpufreq
  • AI视频智能分析网关打造社区/工厂/校园/仓库智慧消防实现精准化安全管控
  • (leetcode) 力扣100 6.三数之和 (双指针)
  • 《普通逻辑》学习记录——关系命题及其推理
  • 《深入理解分布式系统》之认识分布式系统
  • C语言| 递归求1+2+...+100的和
  • Ragflow服务器上部署教程
  • 已经写好论文的AI率降低
  • VTK|结合qt创建通用按钮控制显隐(边框、坐标轴、点线面)
  • 嵌入式学习--江协51单片机day1
  • 【HDLBits刷题】Verilog Language——1.Basics
  • 代码随想录算法训练营总结篇
  • Kubernetes弹性伸缩:让应用自动应对流量洪峰与低谷
  • 上海黄浦区拟73.2654亿元协议出让余庆里7宗组合地块
  • 六大车企一季报:比亚迪近92亿净利稳居第一,多家车企营收下滑
  • 云南昆磨高速发生交通事故致3辆车起火,昆明消防:幸无人员伤亡
  • 博裕基金拟收购“全球店王”北京SKP最多45%股权
  • 江南华南较强降雨扰返程,北方大部需防风沙
  • 贵州游船侧翻248名消防员已在搜救