YashanDB TRUNC函数

22 阅读2分钟

image.png

trunc::= TRUNC "(" ((expr ["," fmt])|(expr ["," n])) ")"

TRUNC函数对expr的值按指定格式截断一个日期值,或按指定位数截断一个数值,返回一个DATE类型的日期值或一个NUMBER类型的数值。

当用于截断日期值时,expr的值必须为DATE、TIMESTAMP类型;当用于截断数值时,expr的值必须为数值型,或可以转换为NUMBER类型的其他类型(转换失败返回Invalid number错误)。

对于其他类型,函数返回类型不支持。

当expr的值为NULL时,函数返回NULL。

fmt

指定日期值的截断格式,规则如下:

类型有效格式返回值备注
CenturyCC, SCC返回当世纪第一天21世纪第一年为2001年
YearSYYYY, YYYY, YEAR, SYEAR, YYY, YY, Y返回当年第一天
ISO YearIYYY, IY, I将每年1月4日所处的周作为当年的第一周,返回该周的第一天ISO 当年第一天可能是公历前一年12月末
QuarterQ返回当季度第一天
MonthMONTH, MON, MM, RM返回当月第一天
WeekWW每年的1月1日作为当年的第一周的第一天,返回当周第一天星期一到星期日都有可能
IWIW星期一为每周的第一天,返回当周第一天
WW每月1日作为本月第一周的第一天,返回当周第一天
DayDDD, DD, J返回当前日期
Start day of the weekDAY, DY, D星期日为每周的第一天,返回当周第一天
HourHH, HH12, HH24返回本小时的开始时间
MinuteMI返回本分钟的开始时间
nullnullnull

当不指定fmt时,默认为'DD'。

n

指定数值的截断位数,规则如下:

n值作用示例
0截断小数部分trunc(123.456, 0) -> 123
> 0 且未超出number_expr小数位数截断该小数位数往后的部分trunc(123.456, 2) -> 123.45
> 0 且超出number_expr小数位数原数据返回trunc(123.456, 5) -> 123.456
120; trunc(123.456, -2) -> 100
0
小数正数向下取整,负数向上取整trunc(123.456, 1.6) = trunc(123.456, 1); trunc(123.456, -1.2) = trunc(123.456, -1)
null返回 null

当不指定n时,表示不截断,返回原数据。

示例

SELECT TRUNC(SYSDATE-10000,'CC') res FROM DUAL;
RES            
--------------------------------
1901-01-01 00:00:00        
 
SET NUMWIDTH 30;
 
SELECT TRUNC('234.33333343',0) "n0",
TRUNC('234.33333343',3) "n3",
TRUNC('234.33333343',30) "n30",
TRUNC('234.33333343',-2) "n-2",
TRUNC('234.33333343',-20) "n-20",
TRUNC('234.33333343',2.98) "n2.98",
TRUNC('234.33333343',-2.98) "n-2.98"
FROM DUAL;
   n0        n3              n30      n-2      n-20        n2.98     n-2.98
----- --------- ---------------- -------- --------- ------------ ----------
  234   234.333     234.33333343      200         0       234.33        200