自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

五種主流數(shù)據(jù)庫(kù):常用數(shù)值函數(shù)

數(shù)據(jù)庫(kù) SQL Server
SQL 的主要功能就是對(duì)數(shù)據(jù)進(jìn)行處理和分析。為了提高數(shù)據(jù)處理的效率,SQL 為我們提供了許多預(yù)定義的功能模塊,也就是函數(shù)(Function)。

SQL 的主要功能就是對(duì)數(shù)據(jù)進(jìn)行處理和分析。為了提高數(shù)據(jù)處理的效率,SQL 為我們提供了許多預(yù)定義的功能模塊,也就是函數(shù)(Function)。

數(shù)值函數(shù)通常接收一個(gè)或者多個(gè)數(shù)字類型的參數(shù),并且返回一個(gè)數(shù)值結(jié)果。本文比較五種主流數(shù)據(jù)庫(kù)常用數(shù)值函數(shù)的實(shí)現(xiàn)和差異,包括 MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite。

數(shù)值函數(shù)

函數(shù)功能

MySQL

Oracle

SQL Server

PostgreSQL

SQLite

ABS(x)

計(jì)算x的絕對(duì)值

??

??

??

??

??

CEILING(x)

返回大于或等于x的最小整數(shù)

??

CEIL(x)

??

??

CEIL(x)

FLOOR(x)

返回小于或等于x的最大整數(shù)

??

??

??

??

??

MOD(x, y)

計(jì)算x除以y的余數(shù)

??

??

x % y

??

x % y

ROUND(x, n)

將x四舍五入到n位小數(shù)

??

??

??

??

??

RANDOM()

返回一個(gè)偽隨機(jī)數(shù)

RAND()

DBMS_RANDOM

RAND()

??

??

絕對(duì)值函數(shù)

ABS(x) 函數(shù)計(jì)算輸入?yún)?shù)的絕對(duì)值,例如:

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

查詢返回的結(jié)果如下:

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

取整函數(shù)

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

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

Oracle 不支持 CEILING(x) 函數(shù),Microsoft SQL Server 不支持 CEIL(x) 函數(shù)。查詢返回的結(jié)果如下:

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

ROUND(x, n) 函數(shù)將 x 四舍五入到 n 位小數(shù),也就是執(zhí)行四舍五入運(yùn)算。例如:

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

第二個(gè)函數(shù)調(diào)用時(shí)省略了參數(shù) n,表示四舍五入到整數(shù)。Microsoft SQL Server 不能省略參數(shù) n,可以將 ROUND(9.456) 替換成 ROUND(9.456, 0)。查詢返回的結(jié)果如下:

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

求余函數(shù)

MOD(x, y)函數(shù)計(jì)算 x 除以 y 的余數(shù),也就是執(zhí)行求模運(yùn)算。例如:

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

Oracle、MySQL 以及 PostgreSQL 實(shí)現(xiàn)了 MOD 函數(shù)。查詢返回的結(jié)果如下:

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

Microsoft SQL Server 和 SQLite 沒有提供 MOD 函數(shù),可以使用%運(yùn)算符進(jìn)行求模運(yùn)算:

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

MySQL 和 PostgreSQL 也支持這種語(yǔ)法。查詢返回的結(jié)果和上面的示例相同。

生成偽隨機(jī)數(shù)

通過計(jì)算機(jī)生成的隨機(jī)數(shù)都是偽隨機(jī)數(shù),數(shù)據(jù)庫(kù)都提供了生成偽隨機(jī)數(shù)的函數(shù)。

MySQL 使用 RAND 函數(shù)返回一個(gè)大于或等于 0 且小于 1 的隨機(jī)數(shù)。Microsoft SQL Server 也使用 RAND 函數(shù)返回隨機(jī)數(shù),但是隨機(jī)數(shù)的取值范圍為大于 0 且小于 1。例如:

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

對(duì)于 MySQL 而言,在一個(gè)查詢語(yǔ)句中的多次 RAND 函數(shù)調(diào)用都會(huì)返回不同的隨機(jī)數(shù)。查詢返回的結(jié)果如下:

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

對(duì)于 Microsoft SQL Server 而言,在一個(gè)查詢語(yǔ)句中的多次 RAND 函數(shù)調(diào)用返回相同的隨機(jī)數(shù)。查詢返回的結(jié)果如下:

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

一般來說,如果你運(yùn)行上面的示例將會(huì)得到不同的隨機(jī)數(shù)。不過,我們也可以為 RAND 函數(shù)指定一個(gè)隨機(jī)數(shù)種子,重現(xiàn)相同的隨機(jī)數(shù)。例如:

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

其中,函數(shù)中的參數(shù) 1 是隨機(jī)數(shù)種子。多次執(zhí)行以上查詢將會(huì)返回相同的結(jié)果。

Oracle 提供了一個(gè)系統(tǒng)程序包 DBMS_RANDOM,其中的 VALUE 函數(shù)可以用于返回大于或等于 0 且小于 1 的隨機(jī)數(shù)。例如:

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

查詢返回的結(jié)果如下:

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

對(duì)于 Oracle,每次調(diào)用 RAND 函數(shù)都會(huì)返回不同的隨機(jī)數(shù)。

提示:Oracle 系統(tǒng)程序包 DBMS_RANDOM 中還提供了其他生成隨機(jī)數(shù)和隨機(jī)字符串的函數(shù),以及設(shè)置隨機(jī)數(shù)種子的方法,可以查看其官方文檔。

PostgreSQL 提供了 RANDOM 函數(shù),可以返回一個(gè)大于或等于 0 且小于 1 的隨機(jī)數(shù)。例如:

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

查詢返回的結(jié)果如下:

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

對(duì)于 PostgreSQL,每次調(diào)用 RANDOM 函數(shù)都會(huì)返回不同的隨機(jī)數(shù)。如果想要重現(xiàn)相同的隨機(jī)數(shù),可以使用 SETSEED 函數(shù)。例如,重復(fù)執(zhí)行以下兩個(gè)語(yǔ)句可以得到相同的隨機(jī)數(shù):

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

SQLite 也提供了 RANDOM 函數(shù),可以返回一個(gè)大于或等于-263 且小于或等于 263-1 的隨機(jī)整數(shù)。例如:

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

查詢返回的結(jié)果如下:

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

對(duì)于 SQLite,每次調(diào)用 RANDOM 函數(shù)都會(huì)返回不同的隨機(jī)數(shù)。SQLite 不支持隨機(jī)數(shù)種子設(shè)置,無法重現(xiàn)相同的隨機(jī)數(shù)。

責(zé)任編輯:華軒 來源: SQL編程思想
相關(guān)推薦

2024-03-05 15:26:03

日期函數(shù)數(shù)據(jù)庫(kù)MySQL

2024-05-07 14:18:18

數(shù)據(jù)庫(kù)SQLMySQL

2024-01-31 16:46:24

SQL數(shù)據(jù)庫(kù)

2011-09-21 11:21:00

NoSQL

2021-02-01 10:17:14

編程C語(yǔ)言計(jì)算機(jī)

2022-02-17 11:03:33

數(shù)據(jù)庫(kù)基礎(chǔ)語(yǔ)法用法

2011-03-01 09:10:19

開源數(shù)據(jù)庫(kù)

2010-04-15 15:52:12

Oracle數(shù)據(jù)庫(kù)

2011-07-13 09:58:15

HBase

2011-05-16 10:29:44

HandlerSockNoSQL

2018-07-30 09:06:46

大數(shù)據(jù)Hadoop數(shù)據(jù)架構(gòu)

2010-03-05 16:03:30

Python連接數(shù)據(jù)庫(kù)

2020-11-23 16:42:38

數(shù)據(jù)庫(kù)MySQL技術(shù)

2011-04-14 09:27:37

內(nèi)存數(shù)據(jù)庫(kù)

2023-11-13 15:36:24

開源數(shù)據(jù)庫(kù)

2011-07-06 16:36:40

Redis

2011-05-30 09:27:35

NoSQL評(píng)測(cè)

2023-09-15 16:03:59

向量數(shù)據(jù)庫(kù)開源

2021-01-13 15:13:07

Python開發(fā) 工具

2022-06-10 09:00:00

數(shù)據(jù)庫(kù)分布式數(shù)據(jù)庫(kù)集群
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)