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

数据库原理及应用_数据库基础_第3章数据库编程_常用系统函数

前言

        "<数据库原理及应用>(MySQL版)".以下称为"本书"中3.1.2节内容

引入

        数据库常用系统函数的分析.上一篇帖子分析了,数据库函数需要看看能否被C语言函数替代

1.字符串函数

1)计算字符串字符数的函数和字符串长度的函数

语法:

        CHAR_LENGTH(str);        //计算字符个数

        LENGTH(str);                    //返回字符串字节长度

代码如下(相比起例3-10有一点修改)

SET @name='china';
SELECT CHAR_LENGTH(@name) 字符数,LENGTH(@name) 字符长度;

运行结果

实用性分析:C语言中有计算字符串长度的函数(没有自己写一个也行,问题不大)

2)合并字符串函数

语法:

        CONCAT(str1,str2....);        //返回连接参数产生的字符串,如果有NULL,返回NULL

代码如下

SELECT CONCAT('MySQL版本:',@@version) 版本信息;

运行结果

实用性分析:C语言中有strcat函数处理字符串连接(两个函数名都有cat).

3)字符串大小写转换函数

在C语言中也有大小写转换函数.

        试想他的应用场景:如果数据库中已确定所有该字段的符号是大写或者小写,那么可以在传入的时候先行用C语言函数处理,这种情况下可以不看这个函数,因为在传入之前可以先处理.同理如果返回值全部大写或小写,也可以用C语言处理.

4)删除空格函数

=============================内容分割线↓===================================

以下代码有问题待查

笔者尝试给出几个删除空格函数的C语言定义

1.删除前导空格

/*删除前导空格*/
char* remove_leading_spaces(char* original){char *tmp=original;while(*tmp=" "){    tmp++;original++;}while(*tmp!='\0')*tmp++=*original++;*tmp='\0';return tmp;
}

2.删除尾部空格

/*删除尾部空格*/
char* remove_trailing_spaces(char* original){char *tmp=original;int length=0;while(*tmp!='\0'){length++;tmp++;}while(*tmp=' '){tmp--;length--;}for(int i=0;i<length;i++)*tmp++=*original++;  return tmp;
}

不知道什么原因,编译通过了显示结果有问题,所以待查.

以此也说明学了的东西要经常看和使用,不然会生疏.

=============================内容分割线↑===================================

3.删除前导和尾部空格

        调用函数1和2即可.

说明:删除空格的应用场景和上面一样,基本上可以不用.

5)取子串函数

本书P76例3-14的改写命令需注意

2.数学函数

包括取绝对值等函数在里面,按照原则来说,用外层宿主语言来处理更好,所以没有什么必要看

3.日期和时间函数

        在C语言标准库里有个time.h的头文件,里边也有类似处理系统时间的函数,虽然用得不多(可能有的人都没听说过),但确实可以替代数据库的日期和时间函数.

4.系统信息函数

        这些函数由于和MySQL数据库有关,所以在必要的情况下使用.

嵌套SQL的程序模型

        在高级语言如C/C++中,使用的是"数据类型(数据结构)+函数定义"建立文件,主程序调用文件里的函数---这一整体思路来编写程序.现在多了数据库的操作.而操作数据库的语言SQL有个特点:就一个执行语句.如何将高级语言的程序思路继续放到引入数据的程序中呢?

        外层函数传入参数给语句,语句封装SQL函数(或过程).数据返回到宿主语言的某个数据类型中.

        如图所示:

                

        从根本上讲,SQL是要取得数据库的数据,至于取得的数据由SQL语言处理,还是交给宿主语言处理,这是数据库设计者决定的.笔者个人看法是所有的数据处理都由宿主语言处理.因为数据库要考虑多人使用,尽可能占用最小的空间,最大可能提高交互的速度,笔者想到的原因很简单:如果定义了数据库函数,岂不是会让数据库的性能下降?---当然也仅属于个人看法.

小结

        数据库常用系统函数的分析,嵌套SQL的程序模型分析

http://www.xdnf.cn/news/19199.html

相关文章:

  • QWidget和QML模式下阻止槽调用的方法总结
  • 复现论文块体不锈钢上的光栅耦合表面等离子体共振
  • 【杂谈】-混沌理论能否赋予机器差异化思考能力?
  • vscode+cmake+mingw64+opencv环境配置
  • 《HM-RAG: Hierarchical Multi-Agent Multimodal Retrieval Augmented Generation》
  • 回归问题的损失函数
  • C++中的临时对象与移动语义——深入理解与实践
  • 算法复习笔记: 双指针_二分查找篇
  • GitCode全方位解析:开源新星的崛起与极致实战指南
  • 果蔬采摘机器人:自动驾驶融合视觉识别,精准定位,高效作业
  • 【前端教程】DOM 操作入门专栏:从基础到实战
  • 现代 Linux 发行版为何忽略Shell脚本的SUID位?
  • 【LeetCode每日一题】21. 合并两个有序链表 2. 两数相加
  • openEuler2403安装部署PostgreSQL17
  • 接口自动化测试框架
  • jumpserver
  • 虚幻基础:角色动画
  • 【Linux】系统部分——软硬链接动静态库的使用
  • Spring Cloud Gateway 网关(五)
  • java字节码增强,安全问题?
  • MySQL-事务(上)
  • 【分享】如何显示Chatgpt聊天的时间
  • 用Git在 Ubuntu 22.04(Git 2.34.1)把 ROS 2 工作空间上传到全新的 GitHub 仓库 步骤
  • 系统质量属性
  • Git 安装与国内加速(配置 SSH Key + 镜像克隆)
  • 设置word引用zotero中的参考文献的格式为中文引用格式或中英文格式
  • 电子战:Maritime SIGINT Architecture Technical Standards Handbook
  • Linux之Shell编程(三)流程控制
  • 深度学习重塑医疗:四大创新应用开启健康新纪元
  • 深度学习系列 | Seq2Seq端到端翻译模型