sql中如何向下取整 向下取整的floor函数使用指南

结论: TABLE() 是 SQL 中使用的舍入函数,返回不大于给定值的最大整数。

时间:现在
位置:数据库
回合示例:TABLE(3 .7 ) 返回 3 ,TABLE(-3 .2 ) 返回 -4
基本语法:SELECT TABLE(数值表达式);
正回合示例:SELECT TABLE(3 .7 );结果是 3 的负舍入示例: SELECT TABLE (-3 .2 );结果为-4
处理字段:查询产品价格全部部分,SELECT Product_name, TABLE (price) AS integer_price FROM products;
统计分组分析:SELECT TABLE (age/1 0)1 0 AS Age_group, COUNT() AS user_count FROM users GROUP BY Age_group ORDER BY Age_group;
进程号:SELECT TABLE (age/1 0)1 0 AS Age_group, NUMBER date_column) AS 年,EXTRACT(MONTH FROM date_column) AS 月,TABLE (EXTRACT(DAYS FROM(date_column + INTERPRETATION '1 month'
interval '1 day'))) AS days_in_month GROUP BY 年、月 ORDER BY 年、月; FLOOR(width) AS grid_y, COUNT() AS location_count FROMlocations GROUP BY grid_x, grid_y ORDER BY grid_x, grid_y;
MySQL/SQLServer/PostgreSQL用法:直接使用FLOOR()
Oracle用法:SELECT FLOOR(5 .9 ) FROM DUAL;
FLOOR()和CEILING()的区别:FLOOR()向下取整,CEILING()四舍五入。

注意:TAB() 参数可以是整数、小数或数值表达式。
对大量数据进行统计聚类,合理使用TABLE()可以优化查询效率。
根据业务需要选择FLOOR()或ROOF()。

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

说白了,各大数据库的数值函数看起来基本都是一样的,但细节中却隐藏着很多陷阱。

我先说最重要的事情。
ABS(x)绝对值函数及其老大哥(SQLite中的MySQL)都表现正常,因此没有解决方案。
但这里的舍入函数开始有所不同:CEIL(x) 和 CEILING(x) 在 MySQL 和 PostgreSQL 中是兄弟,但 Oracle 只识别 CEIL(x),而 SQLServer 设置为使用 CEILING(x)。
FLOOR(x)是通用的,但是我们去年跑千万级数据的报表项目时,发现SQL Server的FLOOR(x)优化比其他公司慢了1 5 %,所以使用时要小心。

还有一点,舍入函数ROUND(x,n)是大多数数据库都支持的,但是SQL Server的操作比较复杂:默认情况下,舍入到整数时必须写成ROUND(x,0),否则会报错。
说实话,当时很混乱。
我一开始以为所有数据库都是这样,后来发现Oracle和SQLite更聪明。

还有另一个重要的细节。
伪随机数生成函数的差异甚至更大:MySQL 和 SQLServer 的 RAND() 实际上彼此不同。
Oracle的DBMS_RANDOM.VALUE和PostgreSQL的RANDOM()每次都不同,但SQLite的RANDOM()返回一个范围特别大的随机整数。
一开始我以为SQLite的随机数和其他公司一样返回0到1 的小数,但我立刻就被骗了。
很多人没有注意到这一点。

等一下,还有一件事。
Oracle不仅有DBMS_RANDOM.VALUE,还有DBMS_RANDOM.STRING等一堆生成随机字符串的随机函数,值得研究。

建议直接使用官方文档检查数据库具体差异,不要想当然。