读SQL学习指南(第3版)笔记11_字符串函数和数值函数

news2024/12/26 9:14:13

1. 尽管SQL标准指定了部分函数,但数据库厂商并没有遵循这些函数规范

2. 字符串

2.1. char

2.1.1. 固定长度、不足部分用空格填充的字符串

2.1.2. MySQL允许的char类型的最大长度为255个字符

2.1.3. Oracle Database允许的最大长度为2,000个字符

2.1.4. SQL Server允许的最大长度为8,000个字符

2.2. varchar

2.2.1. 变长字符串

2.2.2. MySQL允许的varchar类型的最大长度为65,536个字符

2.2.3. Oracle Database(通过varchar2类型)允许的最大长度为4,000个字符

2.2.4. SQL Server允许的最大长度为8,000个字符

2.3. text

2.3.1. MySQL和SQL Server

2.4. clob

2.4.1. Oracle Database

2.5. 保存非常大的可变长字符串

2.5.1. 文档

2.5.2. MySQL有多种text类型(tinytext、text、mediumtext和longtext),可用于最大4GB的文档

2.5.3. SQL Server为最大2GB的文档提供了单一的text类型

2.5.3.1. SQL Server 2005还包括varchar(max)数据类型,并建议使用其代替text类型,text类型将在未来的某个版本中被删除

2.5.4. Oracle Database包括clob数据类型,可保存最大为128TB的巨大文档

2.6. 可以配置MySQL和SQL Server以实现悄无声息地截断字符串,而不是抛出异常

2.7. 从MySQL 6.0版开始,默认行为是“strict”模式,意味着在发生问题时抛出异常,而在早先版本的服务器中,字符串会被截断,并发出警告,如果希望数据库引擎采取这种方式,可以选择ANSI模式

2.8. 避免字符串被截断(或是在Oracle Database和MySQL的strict模式下抛出异常)的最好方法是将列长度的上限设置得足够大,以容纳可能存储在其中的最长的字符串(服务器只会分配足以存储字符串的空间,所以为varchar列设置长度更大的上限并不会浪费存储资源

2.9. 包含单引号

2.9.1. 需要在字符串中添加转义字符,以便服务器将字符串中的撇号视为普通字符

2.9.2. 直接在单引号前再添加一个单引号进行转义

2.9.3. mysql

 -> UPDATE string_tbl
    -> SET text_fld = 'This string didn''t work, but it does now';

2.9.4. Oracle Database和MySQL用户也可以选择使用反斜杠字符来转义单引号

2.9.5. sql

UPDATE string_tbl SET text_fld =

  'This string didn\'t work, but it does now'

2.9.6. 如果要检索字符串,以用于屏幕显示或报表字段,则无须对内嵌引号作任何特殊处理

2.9.7. 如果要将检索出的字符串添加到其他程序要读取的文件中,就需要将转义字符加入字符串

2.9.7.1. 如果使用的是MySQL,可以通过内建函数quote()来实现,该函数会将整个字符串放入引号内并对其中任意的引号/撇号进行转义

2.9.7.2. mysql

-> SELECT quote(text_fld)
    -> FROM string_tbl;

2.9.7.3. 在检索数据用于数据导出时,可以对所有非系统生成的字符列(比如customer_notes列)使用quote()函数

2.10. 包含特殊字符

2.10.1. SQL Server和MySQL服务器包含内建函数char()

2.10.2. Oracle Database用户可以使用chr()函数

2.10.3. 用于从ASCII字符集的255个字符中任意构建字符串

2.10.4. 需要熟悉字符集的布局,从中定位特定的字符

2.10.5. 可以使用concat()函数来拼接若干字符串,可以自行输入这些字符串,也可以通过char()函数生成

2.10.5.1. Oracle Database用户可以使用拼接运算符(||)代替concat()函数

2.10.5.2. SQL Server并未提供concat()函数,需要使用拼接运算符(+)代替

2.10.6. 可以使用ascii()函数,该函数接受字符串最左侧的字符,并返回其编码数值

2.10.7. 使用char()、ascii()和concat()函数(或者拼接运算符),应该能够处理任何罗马字符,即使所用的键盘不包括重音字符或其他特殊字符

2.10.8. 返回数值的字符串函数

2.10.8.1. length()

2.10.8.1.1. 该函数返回字符串所包含的字符数
2.10.8.1.2. SQL Server用户需要使用len()函数

2.10.8.2. position()函数

2.10.8.2.1. 字符串中查找子串的位置
2.10.8.2.2. 在使用数据库时,一定要记住,字符串的第一个字符的位置为1
2.10.8.2.3. 如果没有找到指定的子串,position()函数返回0
2.10.8.2.4. SQL:2003标准的一部分

2.10.8.3. locate()函数

2.10.8.3.1. MySQL专有的
2.10.8.3.2. 从目标字符串的其他位置开始搜索
2.10.8.3.3. 可以接受可选的第3个参数,该参数用于指定搜索的起始位置

2.10.8.4. instr()函数

2.10.8.4.1. Oracle Database专有
2.10.8.4.2. Oracle Database未提供函数position()或locate()
2.10.8.4.3. 该函数在使用两个参数时,能够模拟position()函数
2.10.8.4.4. 使用三个参数时,能够模拟locate()函数
2.10.8.4.5. 返回值0 表示没有找到指定的子串,而不是表示该子串位于字符串的位置0

2.10.8.5. charindx()函数

2.10.8.5.1. SQL Server专有
2.10.8.5.2. SQL Server也没有提供position()或locate()函数
2.10.8.5.3. 该函数和Oracle的instr()函数类似,也可以接受两个或三个参数

2.10.8.6. strcmp()

2.10.8.6.1. MySQL专有
2.10.8.6.1.1. 不区分大小写
2.10.8.6.2. 无法在Oracle Database和SQL Server中模拟
2.10.8.6.3. 一个接受字符串作为参数并返回数值的字符串比较函数
2.10.8.6.3.1. −1(第一个字符串的排序位于第二个字符串之前)
2.10.8.6.3.2. 0(两个字符串相同)
2.10.8.6.3.3. 1(第一个字符串的排序位于第二个字符串之后)
2.10.8.6.4. MySQL还允许在select子句中使用运算符like和regexp来比较字符串
2.10.8.6.4.1. 比较的结果为1(true)或0(false)

2.10.9. 返回字符串的字符串函数

2.10.9.1. concat()函数

2.10.9.1.1. 通过数据片段构建字符串
2.10.9.1.2. Oracle中使用,可以使用拼接运算符(||)来代替
2.10.9.1.3. SQL Server的拼接运算符(+)代替||

2.10.9.2. 在字符串中间添加或替换部分字符

2.10.9.2.1. insert()函数
2.10.9.2.1.1. MySQL提供的函数接受4个参数:原始字符串、起始位置、要替换的字符数量和替换字符串
2.10.9.2.1.2. mysql> SELECT INSERT('goodbye world', 1, 7, 'hello') string;
2.10.9.2.2. replace()函数
2.10.9.2.2.1. Oracle Database
2.10.9.2.2.2. SELECT REPLACE('goodbye world', 'goodbye', 'hello') FROM dual;
2.10.9.2.3. SQL Server也有replace()函数,其功能与Oracle Database的相同
2.10.9.2.4. SQL Server还提供了与MySQL的insert()函数功能相似的stuff()函数
2.10.9.2.4.1. SELECT STUFF('hello world', 1, 5, 'goodbye cruel')
2.10.9.2.5. 从字符串中提取子串
2.10.9.2.5.1. 三种数据库服务器均提供了substring()函数
2.10.9.2.5.2. Oracle Database提供的是substr()函数

3. 算术函数

3.1. acos(X)

3.1.1. 计算x的反余弦

3.2. asin(x)

3.2.1. 计算x的反正弦

3.3. atan(x)

3.3.1. 计草x的反正切

3.4. cos(x)

3.4.1. 计军x的余弦

3.5. cot(x)

3.5.1. 计算x的余切

3.6. exp(x)

3.6.1. 计算e

3.7. ln(x)

3.7.1. 计算x的自然对数

3.8. sin(x)

3.8.1. 计军x的正弦

3.9. sqrt(x)

3.9.1. 计军x的平方根

3.10. tan(x)

3.10.1. 计算x的正切

3.11. mod()函数

3.11.1. 用于计算余数

3.11.2. 常用于整数参数

3.11.3. MySQL中也可以使用实数

3.11.3.1. mysql> SELECT MOD(22.75, 5);

3.11.4. SQL Server未提供mod()函数,可以使用运算符%来代替

3.12. pow()函数

3.12.1. 返回第一个参数的第二个参数次幂

3.12.2. Oracle Database或SQL Server,则为power()函数

3.12.3. pow(2,8)是MySQL中用于计算2^8的方式

3.12.4. 计算机内存通常是以2x字节为单位分配的,所以pow()函数可以非常方便地确定某段内存确切的字节数

3.12.4.1. mysql

-> SELECT POW(2,10) kilobyte, POW(2,20) megabyte,
    -> POW(2,30) gigabyte, POW(2,40) terabyte;

4. 数值精度

4.1. 在处理浮点数时,可能并不总是需要使用或显示数值的全精度

4.2. ceil()

4.2.1. SQL Server使用ceiling()替代ceil()

4.2.2. 向上取整

4.2.2.1. 哪怕小数部分非常小

4.3. floor()

4.3.1. 向下取整

4.3.1.1. 哪怕小数部分非常大

4.4. round()

4.4.1. 四舍五入

4.4.2. 使用负数作为第2个参数,表示小数点左侧的部分需要被截取或取整多少位

4.5. truncate()

4.5.1. Oracle Database使用trunc()替代truncate()

4.5.2. 将不需要的小数位直接丢弃

4.5.3. SQL Server并未提供truncate()函数,而round()函数的第3个可选参数如果存在且不为0,则表明要执行截取操作,而非取整

4.5.4. 使用负数作为第2个参数,表示小数点左侧的部分需要被截取或取整多少位

5. 有符号数

5.1. abs()函数

5.1.1. 绝对值

5.2. sign()函数

5.2.1. 负数,则返回−1

5.2.2. 0,则返回0

5.2.3. 正数,则返回1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/972645.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Day54|动态规划part15:392.判断子序列、115.不同的子序列

392.判断子序列 leetcode链接:力扣题目链接 视频链接:动态规划之子序列,为了编辑距离做铺垫 | LeetCode:115.不同的子序列 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些&…

【深度学习实验】数据可视化

目录 一、实验介绍 二、实验环境 三、实验内容 0. 导入库 1. 归一化处理 归一化 实验内容 2. 绘制归一化数据折线图 报错 解决 3. 计算移动平均值SMA 移动平均值 实验内容 4. 绘制移动平均值折线图 5 .同时绘制两图 6. array转换为tensor张量 7. 打印张量 一、…

C/C++源程序到可执行程序exe的全过程(及汇编和反汇编的区别)

1.C/C源程序到可执行程序exe的全过程(及汇编和反汇编的区别) 一个现代编译器的主要工作流程如下: 源程序(source code)→预处理器(preprocessor)→编译器(compiler)→汇…

【论文复现】Learning I/O Access Patterns to Improve Prefetching in SSDs 系列 1

文章目录 前言数据集准备数据初探数据处理分配标签抽取有效列并搭建模型训练失败分析 前言 LSTM完成ssd I/的预取 ref: git地址: https://github.com/Chandranil2606/Learning-IO-Access-Patterns-to-improve-prefetching-in-SSDs-paper地址: https://people.ucsc…

halo个人博客搭建及介绍

halo个人博客搭建及介绍 halo介绍 halo强大易用的开源建站工具,配合上丰富的模板与插件,帮助你构建你心中的理想站点。具体可以搜索下官网的搭建指南。 博客技术架构 后端 1.spring reactive ,响应式编程,代码风格简单及高并发队列优化相…

android studio cmake生成.a文件(静态库)及调用(c c++)静态库.a

第一步生成静态库.a文件: cmake 语法如何生成静态库,就不介绍了,比较简单,我下文列出的参考资料里面有详细介绍。 add_library(${CMAKE_PROJECT_NAME} STATICsrc/CalculStatic.cpp)这一步有坑,我刚开始的时候&#x…

数学建模之图论

目录 1 图的基本概念2 如何做图2.1 直接做图2.2 编程做图 3 权重邻接矩阵3.1 无向图3.2 有向图 4 Dijkstra 算法4.1 算法概述4.2 代码实现 5 Floyd 算法5.1 算法概述5.2 代码实现 6 思考题 1 图的基本概念 图论中的图(Graph)是由若干给定的点及连接两点的…

mkp勒索病毒的介绍和防范,勒索病毒解密,数据恢复

mkp勒索病毒是一种新兴的电脑病毒,它会对感染的电脑进行加密,并要求用户支付一定的赎金才能解锁。这种病毒已经引起了全球范围内的关注,因为它不仅具有高危害性,而且还有很强的传播能力。本文将对mkp勒索病毒进行详细介绍&#xf…

群辉NAS:J1900系统盘安装SATA固态硬盘方案【自留记录】

群辉NAS:J1900系统盘安装SATA固态硬盘方案 设备介绍: DSM版本:918 主板CPU:蜗牛星际J1900板 内存:8G DDR3 固态:移速SATA固态(msata在win微桌面识别,群晖安装时候识别不到&#xf…

pdf用什么软件打开?介绍几种常用打开方法

pdf用什么软件打开?PDF是一种广泛使用的文件格式,由于其跨平台和易于共享的特点,它已成为许多人在日常工作和学习中使用的首选文件格式。但是,有时候我们可能会遇到一些问题,比如不知道用什么软件打开PDF文件&#xff…

Hadoop生态之hive

一 概述与特点 之所以把Hive放在Hadoop生态里面去写,是因为它本身依赖Hadoop。Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类 SQL 查询功能。 其本质是将 SQL 转换为 MapReduce/Spark 的任务进行运算,底层由 HDFS 来提供…

软件测试/测试开发丨Web自动化 PageObject设计模式

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27167 一、page object 模式简介 马丁福勒个人博客 selenium 官网 1.1、传统 UI 自动化的问题 无法适应 UI 频繁变化无法清晰表达业务用例场景大量的样…

微任务创建 -- queueMicrotask()

微任务创建方式: Promise.then(()>{})Mutation Observer()queueMicrotask() 本文主要介绍queueMicrotask()的使用。 queueMicrotask的使用 Window 或 Worker 接口的 queueMicrotask() 方法,将微任务加入队列以在控制返回浏览器的事件循环之前的安全…

Git 版本回退 超神步骤

Git 版本回退 一. 背景 多版本分支开发,合并版本问题太多,需要回滚到某次版本。我的git客服端工具是 sourcetree 二.操作步骤 2.1 切到当前需要回退版本的分支 2.2 右击需要具体某一个分支,这个分支就是你想切到的分支版本,具体…

正版软件 | CloudDrive 多云盘本地挂载管理工具

前言: CloudDrive 是一个强大的多云盘管理工具,提供一站式的多云盘解决方案,包括云盘本地挂载。旨在无缝集成多个云存储服务,统一整合到一个界面。轻松管理和访问所有云存储服务,无需在不同的应用程序和界面之间切换。…

虚拟现实vr元宇宙井下危险隐患排查模拟实训稳固企业生产

数字化时代,职业教育正面临着前所未有的挑战和机遇,元宇宙的兴起,借助元宇宙平台进行钻井虚拟教学实验,基于元宇宙数字空间搭建更丰富、逼真、安全、灵活的实验环境,成为石油行业教育创新的催化剂。 一、降低实验成本 …

Excel·VBA二维数组组合函数的应用实例

看到一个问题《关于#穷举#的问题,如何解决?(语言-开发语言)》,对同一个数据存在“是/否”2种状态,判断其是否参与计算,并输出一系列数据的“是/否”状态的结果 目录 方法1:二维数组组合函数结果 方法2&am…

树上钟同步

#include<cstdio> #include<cstring> #include<vector> using namespace std;const int N 2505; int ori[N], f[N]; vector<int> edge[N]; // 邻接表的简单实现形式void dfs(int u, int fa) {for (int v : edge[u]) {if (v fa) continue;dfs(v, u);f…

网络协议从入门到底层原理学习(一)—— 简介及基本概念

文章目录 网络协议从入门到底层原理学习&#xff08;一&#xff09;—— 简介及基本概念一、简介1、网络协议的定义2、网络协议组成要素3、广泛的网络协议类型网络通信协议网络安全协议网络管理协议 4、网络协议模型对比图 二、基本概念1、网络互连模型2、计算机之间的通信基础…

Prompt Tuning训练过程

目录 0. 入门 0.1. NLP发展的四个阶段&#xff1a; Prompt工程如此强大&#xff0c;我们还需要模型训练吗&#xff1f; - 知乎 Prompt learning系列之prompt engineering(二) 离散型prompt自动构建 Prompt learning系列之训练策略篇 - 知乎 ptuning v2 的 chatglm垂直领域训练记…