TRUNC¶
参数¶
numeric_expression
精确数字或近似数字数据类型类别的表达式,将要被截断的值。
length
numeric_expression将要截断的精度。
length必须是 INT1 、 INT2 或 INT4 。
- 当
length为正数时,numeric_expression截断为length所指定的小数位数。- 当
length为负数时,numeric_expression则按length所指定的在小数点的左边截断。length取值范围 [-2147483648, 2147483647]length= 2147483647, 则返回numeric_expressionlength= -2147483648, 则返回 0length> 2147483647, 则报错length< -2147483648, 则报错
date
日期值,支持所有的时期格式。
Timestamp:支持所有的fmt格式;
Timestamptz:支持所有的fmt格式;
Date:支持所有的fmt格式, 时分秒都为0
Intervalytm:支持千年、世纪、年、10年、月份的截断
Intervaldts:支持天、小时、分钟、秒、毫秒、微秒的截断;
fmt
日期格式,该日期将由指定的格式所截去
fmt参数缺省时,表示对date进行按日截断,去除分时秒
支持的格式截断信息说明
描述 Fmt 备注 千年 MILLENNIUM
MILLENNIA
MILS
MIL
世纪 CC
SCC
C
CENT
CENTURIES
CENTURY
十年 DECADES
DECADE
DECS
DEC
年 SYYYY
YYYY
YEAR
SYEAR
YYY
YY
Y
YR
YRS
YEARS
iso 标准年 IYYY
IYY
IY
I
季度 Q
QUARTER
QTR
月 MONTH
MON
MM
RM
MONS
MONTHS
星期某一天(与该年第一天的星期数为截断星期) WW 星期的第一天(周日为第一天) DAY
DY
D
要DAY、D兼容oracle需要打开兼容参数 COMPATABLE_DBMS=1 星期的第一天(周1为第一天) IW 星期某一天(与该月份第一天的星期数为截断星期) W 兼容oracle需要打开兼容参数COMPATABLE_DBMS=1 天 DDD
DD
J
DAY
DAYS
D
小时 HH
HH12
HH24
HOUR
HOURS
HRS
HR
H
分钟 MI
MINUTES
MINUTE
MINS
MIN
秒 SECONDS
SECOND
SECS
SEC
S
毫秒 MSECONDS
MSECOND
MSECS
MSEC
MS
微秒 USECONDS
USECOND
USECS
USEC
US
返回值¶
- TRUNC(numeric_expression, length) 返回与 numeric_expression 相同的类型。
- TRUNC(date [, fmt ])返回与输入的时间类型相同。
注解
TRUNC 和 ROUND 的行为很象,唯一的不同在于 TRUNC 不考虑四舍五入的进位而直接截断到指定的精度。
date参数需要明确数据类型,不能只以字符串的形式输入,以字符串为参数会产生二义性, 无法判断参数类型时 timestamp 还是 timestamptz 或者是 date 等。
numeric_expression 不能以字符串的形式输入,否则会识别为日期类型,产生二义性报错。
示例¶
示例1: 用 TRUNC 截断浮点数到小数点后3位
-- 用 TRUNC 截断浮点数到小数点后3位
SELECT TRUNC(192.30274, 3);
TRUNC(numeric) |
--------------------
192.302 |
总数目:1
示例2: 用 TRUNC 截断浮点数到小数左边个位
-- 用 TRUNC 截断浮点数到小数左边个位
SELECT TRUNC(192.30274, -1);
TRUNC(numeric) |
--------------------
190 |
总数目:1
示例3: 用 TRUNC 截断浮点数到最接近的整数
-- 用 TRUNC 截断浮点数到最接近的整数
SELECT TRUNC(192.30274);
TRUNC(numeric) |
--------------------
192 |
总数目:1
示例4: 用 TRUNC 截断日期
-- 用 TRUNC 截断日期
SELECT TRUNC('1987-9-29'::DATE, 'YY');
TRUNC(date) |
-----------------
1987-01-01 |
总数目:1
SELECT TRUNC('YY', '1987-9-29'::DATE);
TRUNC(date) |
-----------------
1987-01-01 |
总数目:1
示例5: 用 TRUNC 截断日期(fmt 缺省)
-- 用 TRUNC 截断日期(fmt 缺省)
SELECT TRUNC('1987-9-29'::DATE);
TRUNC(date) |
-----------------
1987-09-29 |
总数目:1
示例6: 用 TRUNC 截断时间戳
-- 用 TRUNC 截断时间戳
SELECT TRUNC('1987-9-29'::TIMESTAMP, 'YY');
TRUNC(timestamp) |
----------------------
1987-01-01 00:00:00 |
总数目:1
SELECT TRUNC('YY', '1987-9-29'::TIMESTAMP);
TRUNC(timestamp) |
----------------------
1987-01-01 00:00:00 |
总数目:1
示例7: 用 TRUNC 截断时间戳(fmt 缺省)
-- 用 TRUNC 截断时间戳(fmt 缺省)
SELECT TRUNC('1987-9-29 10:10:10.01'::TIMESTAMP);
TRUNC(timestamp) |
----------------------
1987-09-29 00:00:00 |
总数目:1
示例8: 用 TRUNC 截断带时区的时间戳
-- 用 TRUNC 截断带时区的时间戳
SELECT TRUNC('1987-9-29'::TIMESTAMPTZ, 'YY');
TRUNC(timestamptz) |
------------------------
1987-01-01 00:00:00 +08:|
00 |
总数目:1
SELECT TRUNC('YY' ,'1987-9-29'::TIMESTAMPTZ);
TRUNC(timestamptz) |
------------------------
1987-01-01 00:00:00 +08:|
00 |
总数目:1
示例9: 用 TRUNC 截断带时区的时间戳(fmt 缺省)
-- 用 TRUNC 截断带时区的时间戳(fmt 缺省)
SELECT TRUNC('1987-9-29 10:10:10.01'::TIMESTAMPTZ);
TRUNC(timestamptz) |
------------------------
1987-09-29 00:00:00 +08:|
00 |
总数目:1
示例10: 用 TRUNC 截断时间间隔
-- 用 TRUNC 截断 INTERVAL YEAR TO MONTH
SELECT trunc('+12-5'::INTERVAL YEAR TO MONTH, 'y');
TRUNC(INTERVALYTM) |
------------------------
+000000012-00 |
总数目:1
SELECT trunc('y', '+12-5'::INTERVAL YEAR TO MONTH);
TRUNC(INTERVALYTM) |
------------------------
+000000012-00 |
总数目:1
-- 用 TRUNC 截断 INTERVAL DAY TO SECOND
SELECT TRUNC('15 14:13:12.11'::INTERVAL DAY TO SECOND, 'h');
TRUNC(INTERVALDTS) |
------------------------
+000015 14:00:00 |
总数目:1
SELECT TRUNC('h', '15 14:13:12.11'::INTERVAL DAY TO SECOND);
TRUNC(INTERVALDTS) |
------------------------
+000015 14:00:00 |
总数目:1
示例11: 用 TRUNC 截断时间间隔(fmt 缺省)
-- 用 TRUNC 截断 INTERVAL YEAR TO MONTH(fmt 缺省)
SELECT trunc('+12-5'::INTERVAL YEAR TO MONTH);
TRUNC(INTERVALYTM) |
------------------------
+000000012-05 |
总数目:1
-- 用 TRUNC 截断 INTERVAL DAY TO SECOND(fmt 缺省)
SELECT TRUNC('15 14:13:12.11'::INTERVAL DAY TO SECOND);
TRUNC(INTERVALDTS) |
------------------------
+000015 14:13:12 |
总数目:1