文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-11-30 01:32

关注

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

数值函数

函数功能

MySQL

Oracle

SQL Server

PostgreSQL

SQLite

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_RANDOM

RAND()

✔️

✔️

绝对值函数

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编程思想内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯