五种主流数据库:常用数值函数

news/发布时间2024/5/15 12:44:58

SQL 的主要功能就是对数据进行处理和分析。为了提高数据处理的效率,SQL 为我们提供了许多预定义的功能模块,也就是函数(Function)。

数值函数通常接收一个或者多个数字类型的参数,并且返回一个数值结果。本文比较五种主流数据库常用数值函数的实现和差异,包括 MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite。

数值函数函数功能MySQLOracleSQL ServerPostgreSQLSQLite
ABS(x)计算x的绝对值✔️✔️✔️✔️✔️
CEILING(x)返回大于或等于x的最小整数✔️CEIL(x)✔️✔️CEIL(x)
FLOOR(x)返回小于或等于x的最大整数✔️✔️✔️✔️✔️
MOD(x, y)计算x除以y的余数✔️✔️x % y✔️x % y
ROUND(x, n)将x四舍五入到n位小数✔️✔️✔️✔️✔️
RANDOM()返回一个伪随机数RAND()DBMS_RANDOMRAND()✔️✔️

绝对值函数

ABS(x) 函数计算输入参数的绝对值,例如:

SELECT ABS(-1), ABS(1), ABS(0)
FROM employee
WHERE emp_id = 1;

查询返回的结果如下:

ABS(-1)|ABS(1)|ABS(0)
-------|------|------1|     1| 0

取整函数

CEIL(x) 和 CEILING(x) 函数返回大于或等于 x 的最小整数,也就是向上取整。FLOOR(x) 函数返回小于或等于 x 的最大整数,也就是向下取整。例如:

SELECT CEIL(-2), CEILING(-2), FLOOR(4.5)
FROM employee
WHERE emp_id = 1;

Oracle 不支持 CEILING(x) 函数,Microsoft SQL Server 不支持 CEIL(x) 函数。查询返回的结果如下:

CEIL(-2)|CEILING(-2)|FLOOR(4.5)
--------|-----------|-----------2|         -2| 4

ROUND(x, n) 函数将 x 四舍五入到 n 位小数,也就是执行四舍五入运算。例如:

SELECT ROUND(9.456, 1), ROUND(9.456)
FROM employee
WHERE emp_id = 1;

第二个函数调用时省略了参数 n,表示四舍五入到整数。Microsoft SQL Server 不能省略参数 n,可以将 ROUND(9.456) 替换成 ROUND(9.456, 0)。查询返回的结果如下:

ROUND(9.456, 1)|ROUND(9.456)
---------------|------------9.5| 9

求余函数

MOD(x, y)函数计算 x 除以 y 的余数,也就是执行求模运算。例如:

-- Oracle、MySQL 以及 PostgreSQL
SELECT MOD(5,3)
FROM employee
WHERE emp_id = 1;

Oracle、MySQL 以及 PostgreSQL 实现了 MOD 函数。查询返回的结果如下:

MOD(5,3)
--------2

Microsoft SQL Server 和 SQLite 没有提供 MOD 函数,可以使用%运算符进行求模运算:

-- Microsoft SQL Server、MySQL、PostgreSQL 以及 SQLite
SELECT 5 % 3
FROM employee
WHERE emp_id = 1;

MySQL 和 PostgreSQL 也支持这种语法。查询返回的结果和上面的示例相同。

生成伪随机数

通过计算机生成的随机数都是伪随机数,数据库都提供了生成伪随机数的函数。

MySQL 使用 RAND 函数返回一个大于或等于 0 且小于 1 的随机数。Microsoft SQL Server 也使用 RAND 函数返回随机数,但是随机数的取值范围为大于 0 且小于 1。例如:

-- MySQL 和 Microsoft SQL Server
SELECT RAND()
FROM employee
WHERE emp_id <= 3;

对于 MySQL 而言,在一个查询语句中的多次 RAND 函数调用都会返回不同的随机数。查询返回的结果如下:

RAND() 
-------------------
0.12597889371773124
0.6288336549222783
0.7662316241918427

对于 Microsoft SQL Server 而言,在一个查询语句中的多次 RAND 函数调用返回相同的随机数。查询返回的结果如下:

RAND() 
-------------------
0.47224141500963573
0.47224141500963573
0.47224141500963573

一般来说,如果你运行上面的示例将会得到不同的随机数。不过,我们也可以为 RAND 函数指定一个随机数种子,重现相同的随机数。例如:

-- MySQL 和 Microsoft SQL Server
SELECT RAND(1);

其中,函数中的参数 1 是随机数种子。多次执行以上查询将会返回相同的结果。

Oracle 提供了一个系统程序包 DBMS_RANDOM,其中的 VALUE 函数可以用于返回大于或等于 0 且小于 1 的随机数。例如:

-- Oracle
SELECT DBMS_RANDOM.VALUE
FROM employee
WHERE emp_id <= 3;

查询返回的结果如下:

VALUE 
----------------------------------------
0.18048925385153716390255039523196767411
0.3353631757935088547857071602303392595
0.3412188906823928592522036537134902456

对于 Oracle,每次调用 RAND 函数都会返回不同的随机数。

提示:Oracle 系统程序包 DBMS_RANDOM 中还提供了其他生成随机数和随机字符串的函数,以及设置随机数种子的方法,可以查看其官方文档。

PostgreSQL 提供了 RANDOM 函数,可以返回一个大于或等于 0 且小于 1 的随机数。例如:

-- PostgreSQL
SELECT RANDOM()
FROM employee
WHERE emp_id <= 3;

查询返回的结果如下:

random 
------------------
0.1523788485137807
0.2580784959938427
0.0528612944722024

对于 PostgreSQL,每次调用 RANDOM 函数都会返回不同的随机数。如果想要重现相同的随机数,可以使用 SETSEED 函数。例如,重复执行以下两个语句可以得到相同的随机数:

-- PostgreSQL
SELECT SETSEED(0);
SELECT RANDOM();

SQLite 也提供了 RANDOM 函数,可以返回一个大于或等于-263 且小于或等于 263-1 的随机整数。例如:

-- SQLite
SELECT RANDOM()
FROM employee
WHERE emp_id <= 3;

查询返回的结果如下:

RANDOM() 
--------------------
3344080139226703236
-4444734262945592004
8384000175497818543

对于 SQLite,每次调用 RANDOM 函数都会返回不同的随机数。SQLite 不支持随机数种子设置,无法重现相同的随机数。

提示:除我们上面介绍的函数外,SQL 还提供其他的数值函数,例如乘方和开方函数、对数函数以及三角函数,有需要时可以查看数据库相关的文档。

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

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

SG5032EAN规格书

SG5032EAN 晶体振荡器结合了相位锁定环&#xff08;PLL&#xff09;技术和AT切割晶体单元&#xff0c;提供了73.5 MHz至700 MHz的广泛频率范围&#xff0c;以满足高速数字应用的需求。高性能的LV-PECL输出&#xff0c;2.5V和3.3V电源电压&#xff0c;可灵活适配不同设计的电源需…

git简单命令倒退版本及强行推送到远程分支

Git教程 - 廖雪峰的官方网站 git reset --hard 版本号 git push -f origin 远程分支

怎么恢复电脑重装前的数据?介绍几种有效的方法

在日常生活和工作中&#xff0c;电脑已成为我们不可或缺的工具。然而&#xff0c;有时候我们会遇到一些突发情况&#xff0c;比如电脑系统崩溃需要重新安装系统。在这个过程中&#xff0c;我们可能会失去一些重要的数据&#xff0c;比如照片、文档、视频等。这些数据可能包含着…

第三方软件验收测试有什么优势?如何选择靠谱第三方测试机构?

第三方软件验收测试是指由独立的机构或公司对软件产品进行全面的测试和评估&#xff0c;以确定其是否符合预期的质量要求和功能需求。通过第三方软件验收测试&#xff0c;可以确保软件在发布前达到高质量标准&#xff0c;并提供可靠稳定的产品给客户。 第三方软件验收测试具有…

2023年全球软件开发大会(QCon北京站2023)2月:核心内容与学习收获(附大会核心PPT下载)

本次峰会是一个汇集了最新技术趋势、最佳实践和创新思维的盛会。对于从事软件开发和相关领域的专业人士来说&#xff0c;参加这样的大会将有助于他们了解行业动态、提升技能水平、拓展职业视野&#xff0c;并与同行建立联系和合作。 本次峰会包含&#xff1a;AI基础架构、DevO…

如何在Excel中冻结行或列标题?这里提供两种方法

随着数据的增长&#xff0c;许多Excel工作表可能会变得很大&#xff0c;因此冻结行和列标题或冻结窗格非常有用&#xff0c;以便在滚动工作表时将标题锁定到位。在Excel中&#xff0c;可以冻结行标题和列标题&#xff0c;也可以只冻结一个。这不会影响将要打印的单元格。列标题…

前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第十一章 基础界面开发 (组件封装和使用)

前言 Vue 是前端开发中非常常见的一种框架&#xff0c;它的易用性和灵活性使得它成为了很多开发者的首选。而在 Vue2 版本中&#xff0c;组件的开发也变得非常简单&#xff0c;但随着 Vue3 版本的发布&#xff0c;组件开发有了更多的特性和优化&#xff0c;为我们的业务开发带…

【开源】JAVA+Vue.js实现农村物流配送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统登录、注册界面2.2 系统功能2.2.1 快递信息管理&#xff1a;2.2.2 位置信息管理&#xff1a;2.2.3 配送人员分配&#xff1a;2.2.4 路线规划&#xff1a;2.2.5 个人中心&#xff1a;2.2.6 退换快递处理&#xff1a;…

【数据结构】每天五分钟,快速入门数据结构(一)——数组

目录 一.初始化语法 二.特点 三.数组中的元素默认值 四.时间复杂度 五.Java中的ArrayList类 可变长度数组 1 使用 2 注意事项 3 实现原理 4 ArrayList源码 5 ArrayList方法 一.初始化语法 // 数组动态初始化&#xff08;先定义数组&#xff0c;指定数组长度&#xf…

TypeScript(二):TypeScript的细节

TypeScript语法细节 联合类型&#xff08;满足其中一个即可&#xff09; 可以使用多种运算符&#xff0c;从现有的类型中构建新类型 const number|string 123 可以是这些类型中的任何值但是使用的时候需要小心 let virable: number | string 123function getData(id: numb…

【Linux】Linux权限

Linux权限 Linux下用户的分类切换用户su 和 su - 的区别 对命令提权 权限的概念Linux权限管理文件访问者的分类&#xff08;人&#xff09;1️⃣拥有者u→user2️⃣其他人o→others3️⃣所属组group 文件类型和访问权限&#xff08;事物属性&#xff09;文件文件类型文件的基本…

全面解读视频生成模型Sora

2024年2月15日&#xff0c;OpenAI在其官网发布了《Video generation models as world simulators》的报告&#xff0c;该报告提出了作为世界模拟器的视频生成模型Sora。 OpenAI对Sora介绍如下&#xff1a; We explore large-scale training of generative models on video dat…

CSP-动态规划-最长公共子序列(LCS)

一、动态规划 动态规划&#xff08;Dynamic Programming&#xff0c;简称DP&#xff09;主要用于求解可以被分解为相似子问题的复杂问题&#xff0c;特别是在优化问题上表现出色&#xff0c;如最短路径、最大子数组和、编辑距离等。动态规划的核心思想是将原问题分解为较小的子…

多线程基础

线程与进程 进程 进程是对运⾏时程序的封装&#xff0c;是系统进⾏资源调度和分配的基本单位&#xff0c;实现了操作系统的并发。程序由指令和数据组成&#xff0c;但这些指令要运行&#xff0c;数据要读写&#xff0c;就必须将指令加载至 CPU&#xff0c;数据加载至内存&…

基于java eclipse+jsp+mysql+servlet+Spring的学生信息管理系统基础版

基于java eclipsejspmysqlservletSpring的学生信息管理系统基础版 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写> 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于…

WireShark 安装指南:详细安装步骤和使用技巧

Wireshark是一个开源的网络协议分析工具&#xff0c;它能够捕获和分析网络数据包&#xff0c;并以用户友好的方式呈现这些数据包的内容。Wireshark 被广泛应用于网络故障排查、安全审计、教育及软件开发等领域。接下将讲解Wireshark的安装与简单使用。 目录 Wireshark安装步骤…

新版Java面试专题视频教程——准备篇、Redis篇

新版Java面试专题视频教程——准备篇、Redis篇 准备篇 准备篇-01-企业简历筛选规则准备篇-02-简历注意事项准备篇-03-应届生该如何找到合适的练手项目 Redis篇 01-redis开篇02-缓存穿透03-缓存击穿04-缓存雪崩05-双写一致性…

NBlog个人博客部署维护过程记录 -- 后端springboot + 前端vue

项目是fork的Naccl大佬NBlog项目&#xff0c;页面做的相当漂亮&#xff0c;所以选择了这个。可以参考2.3的效果图 惭愧&#xff0c;工作两年了也没个自己的博客系统&#xff0c;趁着过年时间&#xff0c;开始搭建一下. NBlog原项目的github链接&#xff1a;Naccl/NBlog: &#…

【iOS】系统框架

文章目录 前言四十七、熟悉系统框架四十八、多用块枚举&#xff0c;少用for循环四十九、对自定义其内存管理语义的collection使用无缝桥接五十、构建缓存时选用NSCache而非NSDictionary五十一、精简initialize与load的实现代码五十二、别忘了NSTimer会保留其目标对象 前言 本次…

element-UI 组件 dialog 中 ref 获取不到元素

项目场景&#xff1a; vue3集成bpmn.js 渲染过程中&#xff0c;进行流程图查看 问题描述 dialog弹窗加载获取canvas中 加载不到&#xff0c;导致偶尔流程展示加载失败 原因分析&#xff1a; 提示&#xff1a;官方解释如下&#xff0c;主要就是获取的时候&#xff0c;组件没有…
推荐文章