SQLite 默认配备了 SQLite 库中的一系列内置函数。您还可以使用 C 语言添加其他自定义函数,以扩展核心函数。

请注意,以下所有示例都必须运行 sqlite3.exe,并按照流程打开与示例数据库的连接:

步骤 1) 在此步骤中、

  1. 打开 “我的电脑 ”并导航到以下目录 “ E:\sqlite ” 然后
  2. 打开 “ sqlite3.exe ”:

image-20241120183206197

步骤 2) 使用以下命令打开数据库 “ TutorialsSampleDB.db ”:

SQLite 函数

现在你可以运行任何查询,并尝试以下章节中使用的任何查询。

查找字符串的长度

要查找字符串的长度,请使用 LENGTH(X),其中 X 是字符串值。如果 X 为空值,函数 length 将返回一个空值。

您也可以对数值使用 length 函数来获取数值的长度。

示例

在下面的示例中,我们将尝试使用 LENGTH 函数计算以下值:

SELECT LENGTH('A string'), LENGTH(NULL), LENGTH(20), LENGTH(20.5);

这将为您提供

SQLite 函数

结果如下:

  • LENGTH('A string') 返回 8,即字符串 “A string ”的长度。
  • LENGTH(NULL) 返回空值。
  • LENGTH(20) 返回 2,因为 20 是 2 个长度。
  • LENGTH(20.5) 返回 4;浮点“. ”被视为一个字符,因此将有 4 个字符 - 3 个字符是数字的长度。再加上浮点“. ”的一个字符。

使用 UPPER 函数和 LOWER 函数更改大小写

UPPER(X) 将返回相同的 x 字符串,但会以大写字母表示所有字符串字符。

LOWER(X) 将返回相同的 x 字符串,但会以小字符表示所有字符串字符。

如果输入空值,UPPER 和 LOWER 将返回空值。

如果向 UPPER 或 LOWER 传递数值,它们都将返回精确的数值。

示例

SELECT UPPER('a string'), LOWER('A STRING'), UPPER(20), LOWER(20), UPPER(NULL), LOWER(NULL);

这将为您提供

SQLite 函数

结果如下:

  • UPPER('a string') 返回以大写字母表示的字符串 “ a string ” 。
  • LOWER('A STRING') 返回以小写字母表示的字符串 “ A STRING ” 。
  • UPPER(20), LOWER(20) 返回相同的数字,因为它们对数字没有任何影响。
  • UPPER(NULL), LOWER(NULL) 返回空值,因为我们向它们传递了一个空值。

SQLite SUBSTR 函数

SUBSTR 函数从特定位置开始返回特定数量的字符串。您可以向函数传递三个操作数,如下面的 “ SUBSTR(X,Y,Z) ” :

  • X 是要解析的字符串字面量或字符串列。您可以传递字面值(静态值)或列名,在这种情况下,将从列的值中读取值。
  • Y 是起始位置,用于减去字符串的起始位置。
  • 这个数字是可选的,你可以忽略它,在这种情况下,SQLite 将从 Y 位置开始减去字符串,直到字符串结束。

示例

在下面的查询中,我们将使用 SUBSTR 函数从学生姓名的第二个字符开始获取 4 个字符:

SELECT StudentName , SUBSTR( StudentName , 2, 4), SUBSTR( StudentName , 2)
FROM Students;

这将为您提供

SQLite 函数

  • SUBSTR( StudentName , 2, 4) 从第二个字符开始对字符串 “ StudentName**** ” 进行子串化,并返回接下来的 4 个字符。
  • 然而,在函数 SUBSTR( StudentName , 2) 中,我们没有指定要返回的字符数,这就是为什么 SQLite 会返回 “ StudentName**** ” 中从第二个位置开始的所有剩余字符。

使用 SQLite REPLACE 更改字符串的部分内容

REPLACE 用于用一个字符串替换另一个字符串上出现的每个字符串。

REPLACE(X, Y, Z) - X 是输入字符串的文字或列。Y 是要替换为 Z 的字符串。请注意,它将用 Z 替换任何出现在 Y 上的字符串,而不仅仅是一个。

示例

SELECT REPLACE('xx is very lightweight, xx is easy to learn', 'xx', 'SQLite');

这将为您提供

SQLite 函数

  • 替换函数用字符串 “SQLite”替换了所有字符串 “xx”。
  • 因此,输出结果将是 **“SQLite 非常轻量级,SQLite 很容易学习”。

使用 TRIM 函数修剪空格

TRIM 删除字符串开头或结尾的空格。它不会删除字符串中间的空格,只会删除字符串开头或结尾的空格。

示例

在下面的查询中,我们将使用 TRIM 函数删除字符串开头和结尾的空格。

请注意,连接操作符“||”用于在字符串末尾添加一个额外的“;”。为了向您显示黑色窗口中的空格已被删除,我们将使用 TRIM 函数删除字符串中的空格。

SELECT TRIM(' SQLite is easy to learn ') || ';';

这将为您提供

SQLite 函数

  • 请注意,字符串开头和结尾的空格都被去掉了,取而代之的是结尾处的“;”。

使用 ABS 函数读取绝对值

ABS 函数返回数值的绝对值。绝对值是不带任何正负号的数值。ABS(X) 返回的数值取决于 X 的值,如下所示:

  • 如果 X 是数值,则是 X 的绝对值。
  • 如果 X 是空值,则为 NULL 值。
  • 如果 X 是字符串,则为 “0.0 ”值。

示例

在下面的查询中,我们将尝试使用 ABS 函数获取字符串、数字和空值的绝对值:

SELECT ABS(-2), ABS(+2), ABS('a string'), ABS(null);

这将为您提供

SQLite 函数

结果如下:

  • ABS(-2)、ABS(+2) 返回 2,因为 2 是“-2 ”和 “+2 ”的绝对值。
  • ABS('a string') 返回 “0.0”,因为您输入的是字符串值而不是数值。
  • ABS(null) 返回 null,因为您输入的是空值。

使用 ROUND 函数对数值进行四舍五入

小数是带有浮点“. ”的数字,例如 “20.5”、“8.65”。浮点左边的部分称为整数部分,浮点右边的部分为小数部分。

整数是指没有浮点的数字。例如,“20”、“8”。

ROUND(X) 只将十进制数值或列 X 转换为整数。将返回小数点左边的整数部分,并删除小数点右边的所有数字。

示例:

在下面的查询中,我们将尝试使用带有不同选项的 ROUND 函数:

SELECT ROUND(12.4354354), ROUND(12.4354354, 2), ROUND(NULL), ROUND('a string');

这将为您提供:

SQLite 函数

结果如下:

  • ROUND(12.4354354) - 返回值为 “12”,因为您没有指定位数。因此,SQLite 删除了所有小数部分。
  • ROUND(12.4354354, 2) - 返回值 “12.44”,因为只指定了两位数,即小数点右侧的两位数。
  • ROUND(NULL) - 返回空值,因为您输入的是空值。
  • ROUND('a string') - 返回值为 “0.0”,因为您输入的是字符串值。

使用 TYPEOF 函数查找表达式的数据类型

如果要查找列或字面值的类型,可以使用函数 TYPEOF 来实现。

函数 TYPEOF(X) 从其名称上就能返回表达式 X 的数据类型。它返回一个字符串值,表示 X 的数据类型。

示例

在下面的查询中,我们将尝试使用 TYPEOF 函数处理不同类型的字面值:

SELECT TYPEOF(null), TYPEOF(12), TYPEOF(12.5), TYPEOF('a string');

这将为您提供:

SQLite 函数

返回的结果如下:

  • TYPEOF(null) - 返回空值,因为您输入的是空值。
  • TYPEOF(12) - 返回整数,因为 12 是整数。
  • TYPEOF(12.5) - 返回 REAL,因为 12.5 是一个实数。
  • TYPEOF('a string') - 返回文本,因为 “a string ”是文本。

使用 SQLite 查找最后插入的记录 LAST_INSERT_ROWID

SQLite 为所有表中的所有记录分配了一个整数键(Id)。这个数字用于唯一标识这些记录。

在表中 INSERT 新记录时,SQLite 将为 rowid 分配一个唯一值。

如果表的主键只声明在一列上,且该列的数据类型为 INTEGER,则该列值将被用作 rowid。

函数 LAST_INSERT_ROWID() 返回数据库中任何表的最后插入行的 ROW_ID。请注意,该函数不带任何操作数。

示例

在下面的示例中,我们将以如下方式运行函数 LAST_INSERT_ROWID():

SELECT LAST_INSERT_ROWID();

这将为您提供:

SQLite 函数

  • LAST_INSERT_ROWID() 返回 0 是因为当前数据库连接中的任何表都没有插入记录。

现在,让我们插入一个新学生,并在插入语句后再次运行函数 LAST_INSERT_ROWID(),如下所示:

INSERT INTO Students VALUES(11, 'guru', 1, '1998-10-12');
SELECT LAST_INSERT_ROWID();

这将为您提供:

SQLite 函数

  • 在我们插入 id 为 11 的新学生后,LAST_INSERT_ROWID() 将返回最后插入的行 id,即 11。

获取 SQLite 库的版本

要获取 SQLite 库的版本,必须调用 SQLITE_VERSION()函数。

示例

让我们运行以下命令,看看我们使用的 SQLite 版本是什么:

SELECT SQLITE_VERSION();

这将为您提供:

SQLite 函数

SQLITE_VERSION() 返回 3.9.2,这是我们使用的 SQLite 版本。

创建用户自定义函数和聚合用户自定义函数

对于某些用户来说,SQLite 的核心函数是有限的。他们可能需要添加自定义函数来满足自定义需求。

SQLite 不支持创建用户自定义函数。与其他数据库管理系统不同,您不能直接在 SQLite 中创建用户定义函数。

不过,您可以使用 C#、C、PHP 或 C++ 等编程语言创建函数,并使用 “ sqlite3_create_function”函数将该函数与 SQLite 库中的 SQLite 核心函数连接起来。然后,您就可以在数据库中重复使用它们。

**示例

在下面的示例中,我们将使用 C# 编程语言创建一个用户自定义函数,并将其添加到 SQLite 函数中:

[ SQLiteFunction (Name = " DoubleValue ", Arguments = 1, FuncType = FunctionType.Scalar )]
public class DoubleValue : SQLiteFunction
{
public override object Invoke(object[] args )
{
return args [0] * 2;
}
}

This code snippet is written in the C# programming language; it creates a C# function using the C# code.

函数名称为 “ DoubleValue ”,它接受一个参数并返回其值乘以 2。

请注意,C# 会自动将此函数添加到 SQLite 中。您只需编译并运行这段代码。然后,C# 会将同名函数添加到 SQLite 函数列表中。然后,您就可以在 SQLite 中使用该函数了。

同样,使用 C#、C、PHP 或 C++ 等编程语言,也可以创建聚合用户定义函数。这些函数用于扩展 SQLite 中的聚合函数,并使用它们创建自定义聚合函数。

总结

正如我们所看到的,SQLite 提供了一套全面的内置函数,使数据库表和列的操作变得简单。您可以在 SQL 查询中的任何表达式中,对列和字面值使用这些函数。