如果要指定指定范围的随机整数的话,需要用这个公式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
MySQLRAND()函数调用可以在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()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)