在 Oracle 数据库中,TRUNC() 函数用于 截断数值 或 日期,具体功能取决于它所操作的参数类型。它可以用来去掉数字的小数部分,或者按照指定的日期格式截取日期。它的使用非常常见,尤其是在数据处理和格式化时。

1. TRUNC() 用于数字

当 TRUNC() 函数作用于数值时,它会截断数字的小数部分,而不是四舍五入。

语法:

TRUNC(number, decimal_places)

  • number:需要截断的数值。
  • decimal_places(可选):指定保留的小数位数。如果没有指定该参数,则默认为 0,即返回整数部分。

示例:

  1. 去掉小数部分SELECT TRUNC(123.456) FROM dual; -- 结果:123
  2. 保留 2 位小数SELECT TRUNC(123.456, 2) FROM dual; -- 结果:123.45
  3. 保留 1 位小数SELECT TRUNC(123.456, 1) FROM dual; -- 结果:123.4
  4. 去掉整数部分(即负数的截断)SELECT TRUNC(-123.456) FROM dual; -- 结果:-123
  5. 截取至个位SELECT TRUNC(123.999) FROM dual; -- 结果:123

说明:

  • TRUNC() 用于数值时,只是截断而不进行四舍五入。即无论小数部分是多少,都直接丢弃。

2. TRUNC() 用于日期

当 TRUNC() 函数作用于日期时,它会将日期截断至指定的单位(如年、月、日等)。

语法:

TRUNC(date, format)

  • date:需要截断的日期。
  • format(可选):指定截断的粒度,如年、月、日等。常用的格式有:
    • 'YYYY':截断至年份。
    • 'MM':截断至月份。
    • 'DD':截断至日。
    • 'HH':截断至小时。
    • 'MI':截断至分钟。
    • 'SS':截断至秒。

示例:

  1. 截断至年份SELECT TRUNC(SYSDATE, 'YYYY') FROM dual; -- 结果:2025-01-01 00:00:00 这将当前日期截断至当年的第一天。
  2. 截断至月份SELECT TRUNC(SYSDATE, 'MM') FROM dual; -- 结果:2025-09-01 00:00:00 这将当前日期截断至当月的第一天。
  3. 截断至日期(默认行为):SELECT TRUNC(SYSDATE) FROM dual; -- 结果:2025-09-06 00:00:00 默认情况下,TRUNC() 会截断时间部分,保留日期。
  4. 截断至小时SELECT TRUNC(SYSDATE, 'HH') FROM dual; -- 结果:2025-09-06 00:00:00 这将当前日期截断至小时,即去掉分钟和秒。
  5. 截断至分钟SELECT TRUNC(SYSDATE, 'MI') FROM dual; -- 结果:2025-09-06 00:00:00

说明:

  • 如果没有指定 format 参数,TRUNC() 函数会默认截断至日期部分,去掉时间部分(小时、分钟、秒)。
  • 日期的 TRUNC() 不会改变日期的基本值,只会改变其精度,去除多余的部分。

3. 使用 TRUNC() 函数的场景

  • 数字处理:去除数字的小数部分,而不进行四舍五入。例如,报表或财务处理中有时需要处理精度。
  • 日期处理:当你需要获取某一日期的某个特定粒度,如获取当前年份的第一天、月初等。

4. 总结

  • TRUNC() 用于数字时,去掉小数部分,不做四舍五入。
  • TRUNC() 用于日期时,去除多余的时间部分,按指定粒度截断日期。

TRUNC() 是一个非常常用且强大的函数,能够帮助你更灵活地处理数据的格式和精度。