Navicat 博客

在 SQL 中计算字符串出现次数 2020 年 6 月 5 日,由 Robert Gravelle 撰写

尽管 SQL 不像 Java、C ++ 和 PHP 这样的过程编程语言精通字符串处理,但是 SQL 确实提供了许多处理字符串数据的函数。可以使用这些函数来修剪多余的空格或字符,确定字符串的长度以及将多个字段值连接在一起。字符串函数非常值得我们学习,因为它们可以帮助提高代码的效率和可读性。在今天的文章中,我们将学习如何使用几个本机 SQL 字符串函数来计算 char、varchar 或 text 字段中字符串出现的次数。

介绍 LENGTH() 和 REPLACE() 函数

今天我们将在这里使用的两个函数是 LENGTH(str) 和 REPLACE(str, from_str, to_str)。LENGTH() 返回字符串的长度(以字节为单位);而 REPLACE() 通过执行区分大小写的匹配,返回字符串 str,并将所有出现的字符串 from_str 替换为字符串 to_str。

LENGTH() 函数返回字符串的长度(以字节为单位)。这有一些重要的影响,因为这意味着对于包含五个 2 个字节字符的字符串,LENGTH() 会返回 10。若要计算纯字符长度,请改用 CHAR_LENGTH()。

这是一个例子:

length_function (33K)

这是 REPLACE() 函数的示例,该函数将 URL 的协议从“http”更改为“https”:

replace_function (41K)

让我们开始计数

通过将 LENGTH() 和 REPLACE() 与 ROUND() 函数结合使用,我们可以获得包含文本内容的字段中特定子字符串的计数。这是一个使用 Sakila 示例数据库的例子,在 film 表的 description 字段中返回单词“Documentary”的计数:

count_occurrences (172K)

本质上,我们的查询将目标子字符串的出现替换为空(””)字符串,并比较结果字符串的长度。它们之间的区别是源字段中子字符串出现的次数。

将查询整合到用户函数中

如果你计划在许多不同的表上计算字数或使用各种子字符串值,则应考虑将主要计算合并到自定义用户功能中。这是我在 Navicat 中创建的名为“count_string_instances”的函数:

count_occurrences_function (84K)

测试函数

我们可以通过点击“运行”按钮来就地测试我们的函数。这将打开一个对话框以接受输入参数:

input_param_dialog (21K)

返回的结果确认该函数正常运行:

count_occurrences_function_test_result (18K)

从查询中调用我们的函数

函数准备好后,我们可以调用 count_string_instances() 函数来替换查询的计算部分。当我们开始键入函数名称时,Navicat 的自动建议列表现在包括我们的函数!

auto_complete (49K)

与所有函数一样,插入查询时,它会带有可设置输入参数。我们可以通过使用 TAB 键在它们之间导航

auto_complete_fields (43K)

这是更新后的查询和其结果:

query_with_function (181K)

总结

服务器有许多 SQL 字符串函数可以帮助提高代码的效率和可读性。结合使用时,这些功能尤其强大。在今天的文章中,我们学习如何通过使用 Navicat 的多功能函数和存储过程编辑器创建自定义用户函数来计算 char、varchar 或 text 字段中字符串出现的次数。

Navicat 文章
频道条目
分享
文章归档