转换函数
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 | 年的最后一位 | 
| IYYY | ISO 8601 周编号方式的年(4 位或更多位) | 
| IYY | ISO 8601 周编号方式的年的最后 3 位 | 
| IY | ISO 8601 周编号方式的年的最后 2 位 | 
| I | ISO 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) | 
| IDDD | ISO 8601 周编号方式的年中的日(001-371,年的第 1 日时第一个 ISO 周的周一) | 
| DD | 月中的日(01-31) | 
| D | 周中的日,周日(1)到周六(7) | 
| ID | 周中的 ISO 8601 日,周一(1)到周日(7) | 
| W | 月中的周(1-5)(第一周从该月的第一天开始) | 
| WW | 年中的周数(1-53)(第一周从该年的第一天开始) | 
| IW | ISO 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 | 科学记数的指数 |