题解 | 支付间隔平均值

select cast(avg(abs(timestampdiff(second,o.logtime,s.logtime))) as signed) gap
from order_log o
left join select_log s on o.order_id=s.order_id

1、AVG函数,CEILING函数(向上取整),abs 默认返回的结果是浮点数

2、cast()

CAST 是 SQL 中的一个数据类型转换函数,用于将某个表达式转换为指定的数据类型。

语法

sql复制代码CAST(expression AS target_type)

参数说明

  • expression:要转换的表达式,可以是字符串、数字、日期、时间等。
  • target_type:目标数据类型,例如 SIGNED(有符号整数)、UNSIGNED(无符号整数)、CHAR(字符串)、DECIMAL(小数)、DATE(日期)、DATETIME(日期时间)等。

功能

CAST 的作用是将一种数据类型明确地转换为另一种数据类型,常用于数据清洗、格式调整或解决类型不匹配问题。

常见用法

1. 转换为整数

sql复制代码CAST(expression AS SIGNED) -- 转为有符号整数
CAST(expression AS UNSIGNED) -- 转为无符号整数

示例:

sql复制代码SELECT CAST('123.45' AS SIGNED); -- 输出: 123
SELECT CAST('-45.6abc' AS UNSIGNED); -- 输出: 0

2. 转换为字符串

sql复制代码CAST(expression AS CHAR)

示例:

sql复制代码SELECT CAST(123 AS CHAR); -- 输出: '123'
SELECT CAST(2025-01-18 AS CHAR); -- 输出: '2024'

3. 转换为日期或时间

sql复制代码CAST(expression AS DATE) -- 转为日期
CAST(expression AS DATETIME) -- 转为日期时间

示例:

sql复制代码SELECT CAST('2025-01-18 15:30:00' AS DATE); -- 输出: '2025-01-18'
SELECT CAST('2025-01-18' AS DATETIME); -- 输出: '2025-01-18 00:00:00'

4. 转换为小数

sql复制代码CAST(expression AS DECIMAL(length, decimals))

示例:

sql复制代码SELECT CAST('123.456' AS DECIMAL(10, 2)); -- 输出: 123.46
SELECT CAST('12abc' AS DECIMAL(5, 1)); -- 输出: 12.0

3、decimal()

DECIMAL 是一种精确的数值数据类型,通常用于存储需要高精度的定点数,例如货币、财务数据等。DECIMAL 数据类型允许用户指定整数部分和小数部分的位数,避免因浮点运算导致的精度误差。

语法

sql复制代码DECIMAL[(M, D)]
  • M:表示数字的总位数(精度),包括小数点前后的所有数字。最大值为 65。
  • D:表示小数位数(标度),即小数点后的位数。最大值为 30,且不能大于 M
  • 如果未指定 MD,默认值是 DECIMAL(10, 0),即整数部分最多 10 位,小数位为 0。

特点

  1. 精确存储:DECIMAL 不像 FLOAT 或 DOUBLE 使用近似值存储,它可以确保高精度
  2. 性能:因为 DECIMAL 精确存储数值,其性能可能略低于浮点型,但在需要精确计算的场景中非常重要。
  3. 约束:如果插入的值超出 M 位数限制,会抛出错误。如果小数位数超出 D 的限制,数据库会对其进行四舍五入。

4、FLOAT 和 DOUBLE

概念

FLOATDOUBLE 是浮点数类型,用于存储带小数的数字,适合处理需要大范围数值但不要求完全精确的场景(如科学计算)。

区别 float double

精度

单精度,精度较低

双精度,精度更高

存储范围

-3.402823466E+38 至 3.402823466E+38

-1.7976931348623157E+308 至 1.7976931348623157E+308

存储大小

4 字节

8 字节

精确性

存在精度误差

精度误差较小

性能

性能更好,占用内存小

性能略低,占用内存大

5、floor()、ceil()、round()

FLOOR()

向下取整,返回不大于当前值的最大整数

-1.5

-2

CEIL()

向上取整,返回不小于当前值的最小整数

-1.5

-1

ROUND()

四舍五入,返回最接近的整数

-1.5

-2

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务