记录一个TRUNC函数的坑

博主表示不确定是自身对TRUNC函数理解不足,决定记录相关情况。




不知道是我对TRUNC函数理解不够还是怎么的,记录一下



Oracle 和 MySQL 中,`TRUNC` 函数的功能和用途有所不同。下面我们将详细分析它们的用法、区别以及提供代码示例。 --- ## ✅ Oracle 的 `TRUNC()` 函数 Oracle 的 `TRUNC()` 函数可以用于 **日期** 和 **数字** 两种类型: ### 1. 用于日期(`DATE` 类型) **功能**:将日期截断到指定的时间单位(如年、月、日、小时等)。 **语法**: ```sql TRUNC(date, [format]) ``` - `date`:要截断的日期。 - `format`(可选):指定截断的精度,如 `'YYYY'`、`'MM'`、`'DD'` 等。 #### 示例: ```sql SELECT TRUNC(SYSDATE, 'MM') AS first_day_of_month FROM dual; ``` 输出:当前月份的第一天,例如 `2024-10-01 00:00:00` ```sql SELECT TRUNC(SYSDATE, 'HH24') AS truncated_hour FROM dual; ``` 输出:当前时间的小时开始时间,例如 `2024-10-12 15:00:00` ### 2. 用于数字(`NUMBER` 类型) **功能**:截断数字到指定的小数位数,**不进行四舍五入**。 **语法**: ```sql TRUNC(number, [decimal_places]) ``` #### 示例: ```sql SELECT TRUNC(123.456, 2) FROM dual; ``` 输出:`123.45` --- ## ✅ MySQL 的 `TRUNCATE()` 函数 MySQL 中没有 `TRUNC()` 函数,而是使用 `TRUNCATE()` 函数,并且它只用于 **数字类型**。 ### 1. 用于数字(`DECIMAL` 或 `FLOAT` 类型) **功能**:将数字截断到指定的小数位数,**不进行四舍五入**。 **语法**: ```sql TRUNCATE(number, decimal_places) ``` #### 示例: ```sql SELECT TRUNCATE(123.456, 2); ``` 输出:`123.45` MySQL **不支持**对日期使用 `TRUNCATE()`。 --- ## 🆚 Oracle `TRUNC()` vs MySQL `TRUNCATE()` | 功能 | Oracle `TRUNC()` | MySQL `TRUNCATE()` | |------|------------------|--------------------| | 是否支持日期 | ✅ 是 | ❌ 否 | | 是否支持数字 | ✅ 是 | ✅ 是 | | 语法差异 | `TRUNC(date, 'MM')` / `TRUNC(number, 2)` | `TRUNCATE(number, 2)` | | 是否四舍五入 | ❌ 否 | ❌ 否 | | 是否可截断到小时、分钟等 | ✅ 是(Oracle) | ❌ 否 | --- ## ✅ 日期截断在 MySQL 中的替代方法 由于 MySQL 不支持 `TRUNC()`,若要实现类似 Oracle 的日期截断效果,可以使用 `DATE_FORMAT()` 或 `DATE()` 函数。 ### 示例:MySQL 中的“截断”日期 ```sql -- 获取某日期的当月第一天 SELECT DATE_FORMAT('2024-10-12', '%Y-%m-01') AS first_day_of_month; -- 获取某日期的当周第一天(周日为第一天) SELECT DATE_SUB('2024-10-12', INTERVAL WEEKDAY('2024-10-12') DAY) AS first_day_of_week; -- 获取某日期的当天 SELECT DATE('2024-10-12 15:30:00') AS truncated_day; ``` --- ##
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值