跳到主要内容
Version: 开发者版

转换函数

TO_CHAR

目的

TO_CHAR(str,[fmt]) 根据给定的格式将输入参数转换为 TEXT 数据类型的值。 如果省略 fmt,则数据将转换为系统默认格式的 TEXT 值。 如果 str 为 null,则该函数返回 null。

参数

str 输入参数 (任意类型)。
fmt 输入格式参数,详见格式fmt。

示例

select to_char(interval '3 2:20:05' );
to_char
-----------------
3 days 02:20:05
(1 row)

select to_char('4.00'::numeric);
to_char
---------
4
(1 row)

select to_char(NULL);
to_char
---------

(1 row)

select to_char(123,'xx');
to_char
---------
7b
(1 row)

TO_NUMBER

目的

TO_NUMBER(str,[fmt1]) 根据给定的格式将输入参数 str 转换为 NUMREIC 数据类型的值。 如果省略 fmt1,则数据将转换为系统默认格式的 NUMERIC 值。 如果 str 是 NUMERIC,则该函数返回 str。如果 str 计算结果为 null,则该函数返回 null。 如果它不能转换为 NUMERIC 数据类型,则该函数返回错误。

参数

str 输入参数包括以下数据类型(double precision,numeric,text,integer等,但必须隐式转换为numeric)。
fmt1 输入格式参数,详见格式fmt1。

示例

select to_number('19f','xxx');
to_number
-----------
415
(1 row)

select to_number(1210.73::numeric, 9999.99::numeric);
to_number
-----------
1210.73
(1 row)

select to_number(NULL);
to_number
-----------

(1 row)

select to_number('123'::text);
to_number
-----------
123
(1 row)

HEX_TO_DECIMAL

目的

HEX_TO_DECIMAL(str) 十六进制转十进制,如果转换的值超出返回类型bigint的范围,函数返回错误。

参数

str 输入参数(十六进制)。

示例

select hex_to_decimal('ffff'); 
hex_to_decimal
----------------
65535
(1 row)

select hex_to_decimal('0x7fffffffffffffff');
hex_to_decimal
---------------------
9223372036854775807
(1 row)

TO_BINARY_DOUBLE

目的

TO_BINARY_DOUBLE(str) 将输入参数 str 转换为双精度浮点数的值。 如果 str 的计算结果为 null,则该函数返回 null。 如果不能转换为双精度浮点数据类型或超出双精度浮点数的范围,则函数返回错误。

参数

str 输入参数(任意类型,但需要隐式转换为双精度浮点数类型)。

示例

select to_binary_double('1.2');
to_binary_double
------------------
1.2
(1 row)

select to_binary_double('1.2'::text);
to_binary_double
------------------
1.2
(1 row)

select to_binary_double(1.2::numeric);
to_binary_double
------------------
1.2
(1 row)

select to_binary_double(123456789123456789.45566::numeric);
to_binary_double
------------------------
1.2345678912345678e+17
(1 row)

select to_binary_double(NULL);
to_binary_double
------------------

(1 row)

TO_BINRAY_FLOAT

目的

TO_BINARY_FLOAT(str) 将输入参数 str 转换为单精度浮点数。 如果str计算结果为null,则函数返回null。 如果无法转换为单精度浮点数据类型或超出单精度浮点数的范围,则函数返回错误。

参数

str 输入参数(任意类型,但需要隐式转换为单精度浮点数类型)。

示例

select to_binary_float(2.5555::float8);
to_binary_float
-----------------
2.5555
(1 row)

select to_binary_float('123'::text);
to_binary_float
-----------------
123
(1 row)

select to_binary_float(1.2::numeric);
to_binary_float
-----------------
1.2
(1 row)

select to_binary_float(NULL);
to_binary_float
-----------------

(1 row)

BIN_TO_NUM

目的

BIN_TO_NUM(str) 将二进制数转换为十进制数。 如果 str 不能计算为二进制数,则函数返回错误。

参数

str 输入参数(任意类型,但必须可转换或计算为二进制数类型)。

示例

select bin_to_num('1.3'::text, '1.2'::name);
bin_to_num
------------
3
(1 row)

select bin_to_num(1.2::float8, 1::int4);
bin_to_num
------------
3
(1 row)

select bin_to_num(NULL);
bin_to_num
------------

(1 row)

select bin_to_num(NULL, NULL, NULL);
bin_to_num
------------

(1 row)

TO_MULTI_BYTE

目的

TO_MULTI_BYTE(str) 将输入参数 str 中的单字节字符转换为相应的多字节字符。 如果 str 无法转换为文本类型,则函数返回错误。

参数

str 输入参数(text,或可隐式转换为文本类型)。

示例

select to_multi_byte('abc'::text);
to_multi_byte
---------------
abc
(1 row)

select to_multi_byte(NULL);
to_multi_byte
---------------

(1 row)

TO_SINGLE_BYTE

目的

TO_SINGLE_BYTE(str) 将输入参数 str 中的多字节字符转换为相应的单字节字符。 如果 str 无法转换为文本类型,则函数返回错误。

参数

str 输入参数(text,或可隐式转换为文本类型)。

示例

select to_single_byte('abc');
to_single_byte
----------------
abc
(1 row)

select to_single_byte('1.2');
to_single_byte
----------------
1.2
(1 row)

TO_DATE

目的

TO_DATE(str,[fmt]) 根据给定的格式将输入参数 str 转换为日期数据类型的值。 如果省略 fmt,则数据将转换为系统默认格式的日期值。 如果 str 为 null,则该函数返回 null。 如果 fmt 是 J,对于 Julian,则 char 必须是整数。 如果无法转换为 DATE,则该函数返回错误。

参数

str 输入参数(integer,text,可以隐式转换为上述类型,符合日期格式的字符串)。
fmt 输入格式参数,详见格式fmt。

示例

select to_date('50-11-28 ','RR-MM-dd ');
to_date
---------------------
1950-11-28 00:00:00
(1 row)

select to_date(2454336, 'J');
to_date
---------------------
2007-08-23 00:00:00
(1 row)

select to_date('2019/11/22', 'yyyy-mm-dd');
to_date
---------------------
2019-11-22 00:00:00
(1 row)

select to_date('20-11-28 10:14:22','YY-MM-dd hh24:mi:ss');
to_date
---------------------
2020-11-28 10:14:22
(1 row)

select to_date('2019/11/22');
to_date
---------------------
2019-11-22 00:00:00
(1 row)

select to_date('2019/11/27 10:14:22');
to_date
---------------------
2019-11-27 10:14:22
(1 row)

select to_date('2020','RR');
to_date
---------------------
2020-01-01 00:00:00
(1 row)

select to_date(NULL);
to_date
---------

(1 row)

select to_date('-4712-07-23 14:31:23', 'syyyy-mm-dd hh24:mi:ss');
to_date
----------------------
-4712-07-23 14:31:23
(1 row)

TO_TIMESTAMP

目的

TO_TIMESTAMP(str,[fmt]) 根据给定的格式将输入参数 str 转换为不带时区的时间戳。 如果省略 fmt,则数据将转换为系统默认格式中不带时区值的时间戳。 如果 str 为 null,则该函数返回 null。 如果无法转换为不带时区的时间戳,则该函数返回错误。

参数

str 输入参数(double precision,text,可以隐式转换为上述类型)。
fmt 输入格式参数,详见格式fmt。

示例

select to_timestamp(1212121212.55::numeric);
to_timestamp
---------------------------
2008-05-30 12:20:12.55
(1 row)

select to_timestamp('2020/03/03 10:13:18 +5:00', 'YYYY/MM/DD HH:MI:SS TZH:TZM');
to_timestamp
------------------------
2020-03-03 13:13:18
(1 row)

select to_timestamp(NULL,NULL);
to_timestamp
--------------

(1 row)

INTERVAL_TO_SECONDS

目的

INTERVAL_TO_SECONDS(str) 将输入参数str时间间隔转换为秒。输入参数包括:日、时、分、秒和微秒。 如果是年和月,则函数返回错误。

参数

str 输入参数(interval,但包括:日、时、分、秒、微秒)。

示例

select interval_to_seconds('3day 3 hours 3second ');
interval_to_seconds
---------------------
270003
(1 row)

select interval_to_seconds('3day 3 hour 3.3555555555second ');
interval_to_seconds
---------------------
270003.355556
(1 row)

TO_YMINTERVAL

目的

TO_YMINTERVAL(str) 将输入参数 str 时间间隔转换为年到月范围内的时间间隔。 只处理年月,其他部分省略。 如果输入参数为NULL,函数返回NULL,如果输入参数格式错误,函数返回错误。

参数

str 输入参数(text,可以隐式转换为文本类型,必须是时间间隔格式。 兼容 SQL 标准的 SQL 间隔格式, ISO 持续时间格式与 ISO 8601:2004 标准兼容)。

示例

select to_yminterval('P1Y-2M2D');
to_yminterval
---------------
10 mons
(1 row)

select to_yminterval('P1Y2M2D');
to_yminterval
---------------
1 year 2 mons
(1 row)

select to_yminterval('-P1Y2M2D');
to_yminterval
------------------
-1 years -2 mons
(1 row)

select to_yminterval('-P1Y2M2D');
to_yminterval
------------------
-1 years -2 mons
(1 row)

select to_yminterval('-01-02');
to_yminterval
------------------
-1 years -2 mons
(1 row)

TO_DSINTERVAL

目的

TO_DSINTERVAL(str) 将输入参数 str 的时间间隔转换为天到秒范围内的时间间隔。 输入参数包括:日、时、分、秒和微秒。 如果输入参数为NULL,函数返回NULL,如果输入参数包含年月或格式错误,函数返回错误。

参数

str 输入参数(text,可以隐式转换为文本类型,必须是时间间隔格式。 兼容 SQL 标准的 SQL 间隔格式, ISO 持续时间格式与 ISO 8601:2004 标准兼容)。

示例

select to_dsinterval('100 00 :02 :00');
to_dsinterval
-------------------
100 days 00:02:00
(1 row)

select to_dsinterval('-100 00:02:00');
to_dsinterval
---------------------
-100 days -00:02:00
(1 row)

select to_dsinterval(NULL);
to_dsinterval
---------------

(1 row)

select to_dsinterval('-P100D');
to_dsinterval
---------------
-100 days
(1 row)

select to_dsinterval('-P100DT20H');
to_dsinterval
---------------------
-100 days -20:00:00
(1 row)

select to_dsinterval('-P100DT20S');
to_dsinterval
---------------------
-100 days -00:00:20
(1 row)

TO_TIMESTAMP_TZ

目的

TO_TIMESTAMP_TZ(str,[fmt]) 根据给定的格式将输入参数 str 转换为带时区的时间戳。 如果省略 fmt,则数据将转换为具有系统默认格式带时区值的时间戳。 如果 str 为 null,则该函数返回 null。 如果无法转换为带时区的时间戳,则该函数返回错误。

参数

str 输入参数(text,可以隐式转换为文本类型)。
fmt 输入格式参数,详见格式fmt。

示例

select to_timestamp_tz('2019','yyyy');
to_timestamp_tz
------------------------
2019-01-01 00:00:00+08
(1 row)

select to_timestamp_tz('2019-11','yyyy-mm');
to_timestamp_tz
------------------------
2019-11-01 00:00:00+08
(1 row)

select to_timestamp_tz('2003/12/13 10:13:18 +7:00');
to_timestamp_tz
------------------------
2003-12-13 11:13:18+08
(1 row)

select to_timestamp_tz('2019/12/13 10:13:18 +5:00', 'YYYY/MM/DD HH:MI:SS TZH:TZM');
to_timestamp_tz
------------------------
2019-12-13 13:13:18+08
(1 row)

select to_timestamp_tz(NULL);
to_timestamp_tz
-----------------

(1 row)

比较函数

GREATEST

目的

GREATEST(expr1,expr2,...) 获取一个或多个表达式的输入列表中的最大值。 如果任何 expr 的计算结果为 NULL,则该函数返回 NULL。

参数

expr1 输入参数(任意类型)。
expr2 输入参数(任意类型)。
...

示例

select greatest('a','b','A','B');
greatest
----------
b
(1 row)

select greatest(',','.','/',';','!','@','?');
greatest
----------
@
(1 row)

select greatest('瀚','高','数','据','库');
greatest
----------

(1 row)

SELECT greatest('HARRY', 'HARRIOT', 'HARRA');
greatest
----------
HARRY
(1 row)

SELECT greatest('HARRY', 'HARRIOT', NULL);
greatest
----------

(1 row)

SELECT greatest(1.1, 2.22, 3.33);
greatest
----------
3.33
(1 row)

SELECT greatest('A', 6, 7, 5000, 'E', 'F','G') A;
a
---
G
(1 row)

LEAST

目的

LEAST(expr1,expr2,...) 获取一个或多个表达式的输入列表中的最小值。 如果任何 expr 的计算结果为 NULL,则该函数返回 NULL。

参数

expr1 输入参数(任意类型)。
expr2 输入参数(任意类型)。
...

示例

SELECT least(1,' 2', '3' );
least
-------
1
(1 row)

SELECT least(NULL, NULL, NULL);
least
-------

(1 row)

SELECT least('A', 6, 7, 5000, 'E', 'F','G') A;
a
------
5000
(1 row)

select least(1,3,5,10);
least
-------
1
(1 row)

select least('a','A','b','B');
least
-------
A
(1 row)

select least(',','.','/',';','!','@');
least
-------
!
(1 row)

select least('瀚','高','据','库');
least
-------

(1 row)

SELECT least('HARRY', 'HARRIOT', NULL);
least
-------

(1 row)

与 NULL 相关的函数

NANVL

目的

NANVl(str1, str2) 当str2为NaN时,返回一个替代值str1(当str2和str1都为NaN时,返回NaN;当str2或str1为null时,返回null)。 如果输入参数不能转换为real或float8类型,则函数返回错误。

参数

str1 输入参数(real,float8,可以隐式转换为上述类型)。
str2 输入参数(float8,real,可以隐式转换为上述类型)。

示例

SELECT nanvl('NaN', 'NaN');
nanvl
-------
NaN
(1 row)

SELECT nanvl(12345::float4, 1), nanvl('NaN'::float4, 1);
nanvl | nanvl
-------+-------
12345 | 1
(1 row)

SELECT nanvl(12345::float4, '1'::varchar), nanvl('NaN'::float4, '1'::varchar);
nanvl | nanvl
-------+-------
12345 | 1
(1 row)

SELECT nanvl('12345', 'asdf');
nanvl
-------
12345
(1 row)

fmt(日期/时间格式的模板模式)

模式描述
HH一天中的小时 (01-12)
HH12一天中的小时 (01-12)
HH24一天中的小时 (00-23)
MI分钟 (00-59)minute (00-59)
SS秒(00-59)
MS毫秒(000-999)
US微秒(000000-999999)
SSSS午夜后的秒(0-86399)
AM, am, PM or pm正午指示器(不带句号)
A.M., a.m., P.M. or p.m.正午指示器(带句号)
Y,YYY带逗号的年(4 位或者更多位)
YYYY年(4 位或者更多位)
YYY年的后三位
YY年的后两位
Y年的最后一位
IYYYISO 8601 周编号方式的年(4 位或更多位)
IYYISO 8601 周编号方式的年的最后 3 位
IYISO 8601 周编号方式的年的最后 2 位
IISO 8601 周编号方式的年的最后一位
BC, bc, AD或者ad纪元指示器(不带句号)
B.C., b.c., A.D.或者a.d.纪元指示器(带句号)
MONTH全大写形式的月名(空格补齐到 9 字符)
Month全首字母大写形式的月名(空格补齐到 9 字符)
month全小写形式的月名(空格补齐到 9 字符)
MON简写的大写形式的月名(英文 3 字符,本地化长度可变)
Mon简写的首字母大写形式的月名(英文 3 字符,本地化长度可变)
mon简写的小写形式的月名(英文 3 字符,本地化长度可变)
MM月编号(01-12)
DAY全大写形式的日名(空格补齐到 9 字符)
Day全首字母大写形式的日名(空格补齐到 9 字符)
day全小写形式的日名(空格补齐到 9 字符)
DY简写的大写形式的日名(英语 3 字符,本地化长度可变)
Dy简写的首字母大写形式的日名(英语 3 字符,本地化长度可变)
dy简写的小写形式的日名(英语 3 字符,本地化长度可变)
DDD一年中的日(001-366)
IDDDISO 8601 周编号方式的年中的日(001-371,年的第 1 日时第一个 ISO 周的周一)
DD月中的日(01-31)
D周中的日,周日(1)到周六(7)
ID周中的 ISO 8601 日,周一(1)到周日(7)
W月中的周(1-5)(第一周从该月的第一天开始)
WW年中的周数(1-53)(第一周从该年的第一天开始)
IWISO 8601 周编号方式的年中的周数(01 - 53;新的一年的第一个周四在第一周)
CC世纪(2 位数)(21 世纪开始于 2001-01-01)
J儒略日(从午夜 UTC 的公元前 4714 年 11 月 24 日开始的整数日数)
Q季度(to_date和to_timestamp会忽略)
RM大写形式的罗马计数法的月(I-XII;I 是 一月)
rm小写形式的罗马计数法的月(i-xii;i 是 一月)
TZ大写形式的时区名称
tz小写形式的时区名称
OF时区偏移量

fmt1(数字格式的模板模式)

模式描述
9带有指定位数的值
0带前导零的值
. (period)小数点
, (comma)分组(千)分隔符
PR尖括号内的负值
S带符号的数字(使用区域)
L货币符号(使用区域)
D小数点(使用区域)
G分组分隔符(使用区域)
MI在指定位置的负号(如果数字 < 0)
PL在指定位置的正号(如果数字 > 0)
SG在指定位置的正/负号
RN罗马数字(输入在 1 和 3999 之间)
TH or th序数后缀
V移动指定位数(参阅注解)
EEEE科学记数的指数