场景:今天在review项目代码的时候看到这样一个问题,有一张号码表,每次需要从这样表中随机取6个空闲的号码,也就是每次取出来的6个号码应该都会有所不同。然后我就看到了这样的SQL select t.* from tel_number_tbl t where t.status = '空闲' and t.area_c

场景:今天在review项目代码的时候看到这样一个问题,有一张号码表,每次需要从这样表中随机取6个空闲的号码,也就是每次取出来的6个号码应该都会有所不同。然后我就看到了这样的SQL

select t.*

from tel_number_tbl t

where t.status = '空闲'

and t.area_code = '0571'

and t.delete_flg = '未删除'

and rownum <= 6

order by trunc(dbms_random.value(1,7))

分析:显然,这样写的是不对的,因为其每次都会先按默认排序取出前面6条,然后再对这六条数据进行随机排序,这样会导致每次取出来的六条数据都是一样的,虽然它们每次的顺序都不一样。正确的写法应该是

select * from (

select t.*

from tel_number_tbl t

where t.status = '空闲'

and t.area_code = '0571'

and t.delete_flg = '未删除'

order by trunc(dbms_random.value(1,7)) ) temp

where rownum <= 6

附:一、oracle trunc()函数的用法TRUNC(for dates)

精确到天 select trunc(sysdate,'dd') from dual 结果为:2010-9-17

精确到月 select trunc(sysdate,'mm') from dual 结果为:2010-9-1

精确到年 select trunc(sysdate,'yy') from dual 结果为:2010-1-1

TRUNC(for number)

TRUNC函数返回处理后的数值,其工作机制与ROUND函数极为类似,只是该函数不对指定小数前或后的部分做相应舍入选择处理,而统统截去。

其具体的语法格式如下

TRUNC(number, [decimals])

其中:

number 待做截取处理的数值

decimals 指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分

下面是该函数的使用情况:

select TRUNC(899.985,2) from dual 结果为:899.98

select TRUNC(899.985) from dual 结果为:899

select TRUNC(899.985) from dual 结果为:800

注意:第二个参数可以为负数,表示为小数点左边指定位数后面的部分截去,即均以0记。

二、dbms_random.value函数

dbms_random是一个可以生成随机数值或者字符串的程序包。这个包有initialize()、seed()、terminate()、value()、normal()、random()、string()等几个函数,但value()是最常用的。

value()的用法一般有两种,

第一种 function value return number;

这种用法没有参数,会返回一个具有38位精度的数值,范围从0.0到1.0,但不包括1.0,如下:

select dbms_random.value() from dual 结果为:0.265729284748573

第二种value带有两个参数,第一个指下限,第二个指上限,将会生成下限到上限之间的数字,但不包含上限,如下:

select dbms_random.value(1,7) from dual 结果为:3.38380283953849

两者合起来用 trunc(dbms_random.value(1,7)) 也就是随机取得整数X , 1<=X<7, 如下:

select trunc(dbms_random.value(1, 7)) from dual 结果为:3

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

trunc( mysql写法_使用oracle的trunc和dbms相关推荐

  1. oracle可以迁徙mysql吗_项目oracle迁徙到mysql的小总结

    项目oracle迁移到mysql的小总结 1.更新表的不同 oracle update IP_GN_BAXX_GBXX_LS SJXT_ID = #provinceSystemId# JLID = # ...

  2. oracle mysql 乱码_解决Oracle数据库中文乱码

    查询当前Oracle所用编码 在服务器上查看数据库服务器字符集 select userenv('language') from dual; USERENV('LANGUAGE') ---------- ...

  3. springboot原生mysql写法_【Rainbond最佳实践】Spring Boot框架配置MySQL

    Rainbond开源软件介绍: Rainbond是国内首个开源的生产级无服务器PaaS. 深度整合基于Kubernetes的容器管理.多类型CI/CD应用构建与交付.多数据中心的资源管理等技术,提供云 ...

  4. oracle mysql 效率_关于oracle 数据库效率的优化

    最近项目快要快要结束了,我们最终还是要面对我们一直存在的问题,就是数据库查询编码的问题,但是通过各个方面观察我们发现数据库仅仅200w条数据查询议一天的数据也就仅仅不到两万条数据没结果查了将近两分钟, ...

  5. Oracle的trunc函数与MySQL(Maria)的truncate函数

    首先,Oracle的trunc函数与MySQL(Maria)的truncate函数都可以对数值进行截取操作,但是Oracle的trunc函数还可以对日期进行截取操作. 其次,个人测试下来认为,对数值进 ...

  6. oracle tranc,oracle函数trunc的使用

    2011-08-23 17:20 67383人阅读 评论(3) 收藏 举报  分类: oracle学习(9) 版权声明:本文为博主原创文章,未经博主允许不得转载. 1.日期比较时精确到日,可以使用 T ...

  7. c从oracle到mysql移植_数据库从oracle移植到mysql时需要进行的修改

    分页方式不同,oracle使用rownum,mysql使用limit 使用hibernate的QBC不用修改,但hql和sql都应该用统一方法修改 mysql子查询必须带别名 select * fro ...

  8. oracle中trunc x-1,oracle中trunc函数的说明

    一.oracle trunc()函数的用法TRUNC(for dates) 精确到天 select trunc(sysdate,'dd') from dual 结果为:2010-9-17 精确到月 s ...

  9. java oracle to date_用TRUNC和TO_DATE截斷oracle中的java格式化日期()

    當談到Oracle時,我並不是一個特別優秀的人,因爲我對數據庫的大部分經驗都來自SQL服務器.用TRUNC和TO_DATE截斷oracle中的java格式化日期() 我有一個java日期,我想轉換爲只 ...

最新文章

  1. hdu oj 2020 绝对值排序
  2. python可以做什么系统-python能做哪方面的工作
  3. Algorithms_二叉树的层次遍历(广度优先)
  4. java与java ee_Java EE6装饰器:在注入时装饰类
  5. mysql初级数据库_MYSQL初级数据库操作
  6. Ubuntu下配置Apache的Worker模式
  7. JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法...
  8. winfrom 如何让弹窗不影响主界面_「Win」电脑开机后不给我弹几个广告,我还不太习惯...
  9. python微控制器编程从零开始下载_Python微控制器编程从零开始(使用MicroPython)...
  10. 项目介绍star原理_这个 Python 项目厉害了!多个实战案例教你分析时空数据处理...
  11. 基于matlab的高等数学,基于MATLAB的高等数学问题求解
  12. 微信小程序demo、开发工具下载地址
  13. CS 61A FALL 2020 Project-cats
  14. php 数字转换为字符串,PHP-将数字转换为Excel的字符串
  15. 迎合老板还是员工 结果导向CRM更受欢迎
  16. 找不到 Microsoft Excel Driver ODBC 驱动程序的安装例程 解决方案
  17. Springboot面向全球电子商城系统3v50f计算机毕业设计-课程设计-期末作业-毕设程序代做
  18. Redis批量删除Key的三种方式(linux和windows环境下都有)
  19. ValueError: With n_samples=0, test_size=0.15 and train_size=None, the resulting train set will be em
  20. 怎么用python画圆柱_python绘制圆柱体

热门文章

  1. source insight怎么生成函数调用关系图?
  2. python list()函数 (从可迭代对象返回初始化的新列表)
  3. Git中pull,commit和push的概念
  4. cudnn问题 cudnnCreate 延时长 见效慢 要卡十几分钟才能过 如何解决?(229)
  5. 深入浅出python机器学习_4.3.1_岭回归的原理 4.3.2_岭回归的参数调节
  6. ROS服务通信机制原理及示例代码
  7. Delete Edges 完全图-找规律
  8. oracle 找不到程序单元,Oracle Web ADI 加载时错误:ORA-06508: PL/SQL: 无法在调用之前找到程序单元...
  9. php foreach方法,forEach方法怎么使用
  10. Ubuntu返回到Gnome经典桌面!