SQLite 字符串函数:REPLACE、SUBSTR、TRIM、LENGTH

⚡ 智能摘要

SQLite 字符串函数(例如 LENGTH、SUBSTR、REPLACE 和 TRIM)直接在查询中操作文本,而数值辅助函数(例如 ABS 和 ROUND)以及 TYPEOF 和版本辅助函数则扩展了查询的功能。 SQLite 库执行。

  • 📏 长度: LENGTH 函数计算字符串包含的字符数,当传入的值为 null 时,它返回 null。
  • 🔠 大小写转换: UPPER 和 LOWER 函数可以将字符串转换为大写或小写字母,数字和空值保持不变。
  • ✂️ 子字符串: SUBSTR extrac从选定的位置开始替换 ts 个字符,而 REPLACE 则将一个子字符串的每个出现位置替换为另一个子字符串。
  • 🧮 数字辅助函数: ABS 返回一个不带符号的值,ROUND 将十进制数缩短为您请求的位数。
  • 🔍 检查: TYPEOF 报告表达式的数据类型,LAST_INSERT_ROWID 返回最后插入行的 ID。
  • 🤖 人工智能辅助: GitHub Copilot 和 AI 文本转 SQL 工具脚手架 SQLite 函数查询,而自定义 C 函数扩展了内置库。

SQLite 字符串函数

如何设定 SQLite 并运行字符串函数查询

SQLite 默认配备了内置函数列表 SQLite 库。您还可以使用C语言添加一些其他自定义函数来扩展核心功能。

请注意,对于以下所有示例,您必须运行 sqlite3.exe 并按如下方式打开与示例数据库的连接:

步骤1) 在此步骤中,打开“我的电脑”,导航到以下目录“C:\sqlite”,然后打开“sqlite3.exe”:

SQLite 字符串函数

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

SQLite 字符串函数

现在您可以运行任何 询问 并尝试以下部分中使用的任何查询。

查找字符串的长度 SQLite

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

您还可以将长度函数与数值一起使用来获取数值的长度。

计费示例:

在下面的例子中,我们将尝试使用以下值的 LENGTH 函数语法:

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

这会给你:

查找字符串的长度 SQLite

执行结果如下:

  • LENGTH('A string') 返回字符串“A string”的长度 8。
  • LENGTH(NULL) 返回空值。
  • LENGTH(20) 返回 2,因为 20 是 2 个长度。
  • LENGTH(20.5) 返回 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);

这会给你:

UPPER 和 LOWER 函数示例 SQLite

执行结果如下:

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

SQLite SUBSTR 函数

SUBSTR 函数返回从指定位置开始的指定段字符串。你可以向该函数传递三个操作数,例如“SUBSTR(X,Y,Z)”,如下所示:

  • X 是要解析的字符串文字或字符串列。您可以传递文字值(静态值)或列名,在这种情况下,将从列的值中读取该值。
  • Y 是起始位置,例如trac从它开始的字符串。
  • Z 是从特定位置 Y 开始解析的字符数。此数字是可选的,您可以忽略它,在这种情况下, SQLite 将会trac从位置 Y 开始的字符串表示字符串的结尾。

计费示例:

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

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

这会给你:

SUBSTR 函数示例 SQLite

  • SUBSTR(StudentName, 2, 4) 从字符串“StudentName”的第二个字符开始截取子字符串,并返回接下来的 4 个字符。
  • 然而,在函数 SUBSTR(StudentName, 2) 中,我们没有指定要返回的字符数,这就是原因。 SQLite 返回“StudentName”中从第二个位置开始的所有剩余字符。

使用以下方法更改字符串的部分内容 SQLite 替换功能

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

REPLACE(X, Y, Z) – X 是输入字符串文字或列。Y 是要用字符串 Z 替换的字符串。请注意,它将用 Z 替换所有出现的字符串 Y,而不仅仅是一次。

计费示例:

在以下查询中,我们将所有出现的字符串“xx”替换为字符串“SQLite“:

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

这会给你

REPLACE 函数示例 SQLite

  • 替换函数将所有字符串“xx”替换为字符串“SQLite“。
  • 所以输出结果将是“SQLite 非常轻便, SQLite 很容易学”。

使用 SQLite TRIM功能

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

计费示例:

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

注意,连接运算符“||”用于在字符串末尾添加一个额外的“;”。以显示黑色窗口中的空格已被删除。

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

这会给你:

TRIM 函数示例 SQLite

请注意如何从字符串的开头和结尾删除空格,并在末尾用“;”替换。

使用以下方法读取绝对值 SQLite ABS功能

ABS 函数返回数值的绝对值。绝对值是没有任何正号或负号的数值。ABS(X) 根据 X 的值返回一个值,如下所示:

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

计费示例:

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

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

这会给你:

ABS 功能示例 SQLite

测试结果如下:

  • ABS(-2)、ABS(+2) 返回 2,因为 2 是“-2”和“+2”的绝对值。
  • ABS('a string') 返回“0.0”,因为您传递的是字符串值而不是数字值。
  • ABS(null) 返回 null,因为您为其传递了一个 null 值。

使用 ROUND 函数对数值进行舍入 SQLite

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

整数是不含浮点数的数字。例如,“20”、“8”。

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

计费示例:

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

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

这会给你:

ROUND 函数示例 SQLite

结果如下:

  • ROUND(12.4354354) – 返回值“12”,因为您没有指定位数。因此, SQLite 删除所有小数部分。
  • ROUND(12.4354354, 2) — 返回值“12.44”,因为您仅指定要四舍五入的 2 位数字,即小数点右边的两位数字。
  • ROUND(NU​​LL) – 返回 null,因为您向它传递了一个 null 值。
  • ROUND('a string') – 返回值“0.0”,因为您向它传递了一个字符串值。

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

如果您想找出列或文字值的类型,可以使用函数 TYPEOF 来实现。

TYPEOF(X) 函数,顾名思义,返回表达式 X 的数据类型。它返回一个字符串值,表示 X 的数据类型。它根据数据类型返回值,无论是“NULL”值、实数、文本、整数……等等。

计费示例:

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

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

这会给你:

TYPEOF 函数示例 SQLite

返回结果如下:

  • TYPEOF(null) – 返回 null,因为您向它传递了一个 null 值。
  • TYPEOF(12) – 返回一个整数,因为 12 是一个整数。
  • TYPEOF(12.5) — 返回 REAL,因为 12.5 是一个实数。
  • TYPEOF('a string') – 返回文本,因为“a string”是文本。

查找最后插入的记录 SQLite 最后插入行号

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

在表中插入新行时, SQLite 将为 rowid 分配一个唯一值。

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

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

计费示例:

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

SELECT LAST_INSERT_ROWID();

这会给你:

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();

这会给你:

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++ 并将该函数附加到核心 SQLite 中的功能 SQLite 库本身使用“sqlite3_create_function”函数。然后您可以在数据库中重用它们。

计费示例:

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

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

此代码片段写在 C#编程语言;它使用 C# 代码创建一个 C# 函数。

函数名称将是“Double“Value”接受一个参数,并返回该参数值乘以 2 的结果。

请注意,C# 自动将此函数添加到 SQLite。您只需编译并运行此代码。然后 C# 会将同名函数添加到 SQLite 函数。然后您可以在 SQLite.

同样的方式使用 C#、C、PHP 或 C++,您还可以创建聚合用户定义函数。这些函数用于扩展 SQLite 并使用它们来创建自定义聚合函数。

常见问题

标量函数(例如 LENGTH、UPPER 和 ROUND)每行运行一次,每次返回一个值。聚合函数(例如 COUNT、SUM 和 GROUP_CONCAT)同时处理多行数据,并返回整个组的组合结果。

SQLite 使用 || 运算符连接字符串,例如 'a' || 'b'。较新的版本还添加了 concat() 和 concat_ws() 标量函数,而 group_concat() 将多行中的值合并到一个带分隔符的字符串中。

是的。 SQLite 提供 DATE、TIME、DATETIME、JULIANDAY 和 STRFTIME 函数。这些函数可以格式化文本、Unix 时间戳或特殊值“now”并计算日期。 SQLite 将日期存储为 TEXT、REAL 或 INTEGER 类型,而不是专用类型。

默认情况下,UPPER 和 LOWER 仅更改 ASCII 字母 A 到 Z,因此带重音符号或非拉丁字符保持不变。完整的 Unicode 大小写转换需要编译 ICU 扩展。 SQLite而很少有默认版本包含此功能。

使用 INSTR(X, Y) 函数,该函数返回子字符串 Y 在字符串 X 中的第一个位置(从 1 开始计数)。如果子字符串不存在,则返回 0。将 INSTR 与 SUBSTR 结合使用可以实现更多功能。trac匹配字符后的文本。

将表达式包裹在 IFNULL(X, fallback) 或 COALESCE(X, fallback) 中,以便在函数返回 null 值时使用默认值。COALESCE 函数接受多个参数,并返回第一个非 null 值,这在多个列可能为空的情况下非常有用。

是的。 GitHub 副驾驶 它会根据注释或表名建议调用 LENGTH、SUBSTR、REPLACE 和 ROUND 函数,并生成用户自定义的 C 或 C# 函数代码。务必将其输出与您的数据库架构进行比对,因为它可能会生成自定义列名。

是的。AI文本转SQL助手可以将纯语言请求转换为SQL语句。 SQLite 使用 TRIM 和 REPLACE 等字符串函数的查询。它们可以加快原型开发速度。ping但是,您应该根据自己的数据验证生成的 SQL,因为机器学习模型有时会产生不准确的逻辑。

总结一下这篇文章: