MySQL中的RAND()函数使用

MySQL中的RAND()函数使用,第1张

rand() 随机生成 0 - 1的浮点数 , 常与其他函数结合使用 ,比如 ceiling,floor,LPAD 等

如果要指定指定范围的随机整数的话,需要用这个公式FLOOR(i + RAND() * j),比如 

# 生成 7 - 11的随机数  SELECT FLOOR(7 + (RAND() * 5))

floor 地板取小于该值的最大整数 ,比如 0

mysql>select floor(1.23),floor(-1.23)

   1           -2 

ceiling 则相反,向上取整,取大于该值的最小整数 ,比如

SELECT CEILING(1.23)# 2

SELECT CEIL(-1.23)# -1

lpad 是左填充, 用法如下 :

LPAD(RAND()*31 + 1,2,'0')) # 取01-31的随机整数 ,保留两位,如果是一位,左边填0

MySQL

RAND()函数调用可以在0和1之间产生一个随机数:

mysql>

SELECT

RAND(

),

RAND(

),

RAND(

)

+------------------+-----------------+------------------+

|

RAND(

)

|

RAND(

)

|

RAND(

)

|

+------------------+-----------------+------------------+

|

0.45464584925645

|

0.1824410643265

|

0.54826780459682

|

+------------------+-----------------+------------------+

1

row

in

set

(0.00

sec)

当调用一个整数参数时,RAND()使用该随机数发生器种子值。每次在给定值种子生成,RAND()会产生一个可重复的一系列数字:

mysql>

SELECT

RAND(1),

RAND(

),

RAND(

)

+------------------+------------------+------------------+

|

RAND(1

)

|

RAND(

)

|

RAND(

)

|

+------------------+------------------+------------------+

|

0.18109050223705

|

0.75023211143001

|

0.20788908117254

|

+------------------+------------------+------------------+

1

row

in

set

(0.00

sec)

可以使用ORDER

BY

RAND(),随机组行或值如下:

要了解ORDER

BY

RAND()函数,

假设EMPLOYEE_TBL的表有以下记录:

mysql>

SELECT

*

FROM

employee_tbl

+------+------+------------+--------------------+

|

id

|

name

|

work_date

|

daily_typing_pages

|

+------+------+------------+--------------------+

|

1

|

John

|

2007-01-24

|

250

|

|

2

|

Ram

|

2007-05-27

|

220

|

|

3

|

Jack

|

2007-05-06

|

170

|

|

3

|

Jack

|

2007-04-06

|

100

|

|

4

|

Jill

|

2007-04-06

|

220

|

|

5

|

Zara

|

2007-06-06

|

300

|

|

5

|

Zara

|

2007-02-06

|

350

|

+------+------+------------+--------------------+

7

rows

in

set

(0.00

sec)

现在使用以下目录:

mysql>

SELECT

*

FROM

employee_tbl

ORDER

BY

RAND()

+------+------+------------+--------------------+

|

id

|

name

|

work_date

|

daily_typing_pages

|

+------+------+------------+--------------------+

|

5

|

Zara

|

2007-06-06

|

300

|

|

3

|

Jack

|

2007-04-06

|

100

|

|

3

|

Jack

|

2007-05-06

|

170

|

|

2

|

Ram

|

2007-05-27

|

220

|

|

4

|

Jill

|

2007-04-06

|

220

|

|

5

|

Zara

|

2007-02-06

|

350

|

|

1

|

John

|

2007-01-24

|

250

|

+------+------+------------+--------------------+

7

rows

in

set

(0.01

sec)

mysql>

SELECT

*

FROM

employee_tbl

ORDER

BY

RAND()

+------+------+------------+--------------------+

|

id

|

name

|

work_date

|

daily_typing_pages

|

+------+------+------------+--------------------+

|

5

|

Zara

|

2007-02-06

|

350

|

|

2

|

Ram

|

2007-05-27

|

220

|

|

3

|

Jack

|

2007-04-06

|

100

|

|

1

|

John

|

2007-01-24

|

250

|

|

4

|

Jill

|

2007-04-06

|

220

|

|

3

|

Jack

|

2007-05-06

|

170

|

|

5

|

Zara

|

2007-06-06

|

300

|

+------+------+------------+--------------------+

7

rows

in

set

(0.00

sec)

CREATE PROCEDURE init_reportUrl()

BEGIN

DECLARE s INT DEFAULT 0

DECLARE r_id bigint(10)

DECLARE report CURSOR FOR select distinct id as r_id FROM ReportHotLine

-- 声明当游标遍历完后将标志变量置成某个值

DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1

-- 打开游标

open report

-- 将游标中的值赋值给变量,注意:变量名不要和返回的列名同名,变量顺序要和sql结果列的顺序一致

fetch report into r_id

-- 当s不等于1,也就是未遍历完时,会一直循环

while s<>1 do

-- 执行业务逻辑

UPDATE wh_csyx . dy_pres30207800013_001_local a

JOIN ReportHotLine b ON a.gdId = b.ID

AND b.createtime = ( SELECT max( createtime ) FROM ReportHotLine WHERE ID = r_id )

SET blms = b.banliInfo where a.gdId =r_id

-- 将游标中的值再赋值给变量,供下次循环使用

fetch report into r_id

-- 当s等于1时表明遍历以完成,退出循环

end while

-- 关闭游标

close report

END

call init_reportUrl()


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8634742.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存