- 1 课程目标
- 2 数据类型
- —2.1 介绍
- —2.2 数值类型
- ——2.2.1 整数类型
- ——2.2.2 任意精度类型
- ——2.2.3 序列整数类型
- ——2.2.4 浮点类型
- —2.3 字符类型
- —2.4 日期时间类型
- —2.5 二进制类型
- —2.6 布尔类型
- —2.7 位串类型
- —2.8 其它数据类型
- —2.9 自定义数据类型
- 3 常用函数
- —3.1 常用函数概述
- —3.2 常用字符函数
- ——3.2.1 ascii(string)
- ——3.2.2 btrim(string text [, characters text])
- ——3.2.3 ltrim(string [, characters])
- ——3.2.4 rtrim(string [, characters]
- ——3.2.5 upper(string)
- ——3.2.6 lower(string)
- ——3.2.7 concat(str1,str2)
- ——3.2.8 replace(string, substring)
- ——3.2.9 reverse(str)
- ——3.2.10 substrb(text,int,int)
- ——3.2.11 其它常用字符函数
- —3.3 数字操作符
- —3.4 常用数值函数
- ——3.4.1 abs(exp), cos(exp), sin(exp)
- ——3.4.2 bitand(integer, integer)
- ——3.4.3 acos(exp), asin(exp)
- ——3.4.4 random()
- ——3.4.5 其它常用数值函数
- —3.5 常用时间和日期函数
- —3.6 时间日期操作符—(+、-、*、/)
- —3.7 类型转换函数
- ——3.7.1 cast(x as y)
- ——3.7.2 to_char(int, fmt)
- ——3.7.3 to_date(text,fmt)
- ——3.7.4 to_number ( expr [, fmt])
- ——3.7.5 to_timestamp(text, fmt)
- ——3.7.6 to_bigint(varchar)
- —3.8 日期\时间格式化模板
- —3.9 数值格式化模板
- —3.10 思考题
- 4 操作示例
1 课程目标
• 了解 GBase 8c 的数据类型以及相关函数的使用
• 列举 GBase 8c 中常用的数据类型
• 了解 GBase 8c 的自定义数据类型
• 介绍 GBase 8c 中常用的单行函数
• 备注:课程功能分布式和单机都适用
2 数据类型
—2.1 介绍
✔ 什么是数据
数据是事实或观察的结果,是对客观事物的逻辑归纳,用于表示客观事物的未加工的原始素材。
✔ 数据库中的数据类型
a.在 GBase 8c 中,数据类型是数据的一个基本属性,用于区分不同类型的数据。不同的数据类型所占用的存储空间不同,能够 进行的操作也不相同。
b.数据库中的数据存储在数据表中,数据表中的每一列都定义了其数据类型。当用户存储数据时,需要遵循这些数据类型的属性 定义,否则可能会出现报错或精度丢失等问题。在GBase 8c中,主要的数据类型有:
常用的数据类型
包括:数值类型、字符类型、日期类型等。
非常用的数据类型
包括:布尔类型、二进制类型、XML类型、几何类型等。
自定义数据类型
—2.2 数值类型
——2.2.1 整数类型
——2.2.2 任意精度类型
——2.2.3 序列整数类型
——2.2.4 浮点类型
—2.3 字符类型
—2.4 日期时间类型
—2.5 二进制类型
—2.6 布尔类型
用于表示真假的数据类型
✔ “真”值的有效文本值是:
TRUE、't'、'true'、'y'、'yes'、'1' 、'TRUE'、true、整数范围内1~2^63-1、整数范围内-1~-2^63。
✔“假”值的有效文本值是:
FALSE、'f'、'false'、'n'、'no'、'0'、0、'FALSE'、false。
使用TRUE和FALSE是比较规范的用法(也是SQL兼容的用法)。
—2.7 位串类型
位串就是一串1和0的字符串。它们可以用于存储位掩码。
✔ 如果用户明确地把一个位串值转换成bit(n),则此位串右边的内容将被截断或者在右边补齐零,直到
刚好n位,而不会抛出任何错误。
✔ 如果用户明确地把一个位串数值转换成bit varying(n),如果它超过了n位,则它的右边将被截断。
—2.8 其它数据类型
—2.9 自定义数据类型
用户还可以通过 CREATE TYPE 语句创建自定义类型,支持 5 种:
✔ 复合类型 由一个属性名和数据类型的列表指定。复合类型本质上和表的行类型相同,但是如果只想定义一种类型,使用CREATE TYPE避免了创建一个实际的表。单独的复合类型也是很有用的,例如可以作为函数 的参数或者返回类型
✔ 基本类型 用户可以自定义一种新的基本类型(标量类型)。通常来说这些函数必须是底层语言所编写。
✔ shell类型 是一种用于后面要定义的类型的占位符。在创建基本类型时,需要shell类型作为一种向前引用。 ✔ 枚举类型 由若干个标签构成的列表,每一个标签值都是一个非空字符串,且字符串长度不能超过63个字节。
✔ 集合类型 类似数组,但是没有长度限制,主要在存储过程中使用。
创建一种复合类型,建表并插入数据以及查询。 CREATE TYPE test_type1 AS ( f1 int, f2 text ); CREATE TABLE t1 ( a int, b test_type1 ); INSERT INTO t1 VALUES ( 1,( 1, 'demo' ) ); SELECT (b).f1 FROM t1 ;
创建一个枚举类型 CREATE TYPE test_type2 AS ENUM ('create', 'modify', 'closed');
创建一个集合类型 CREATE TYPE test_type3 AS TABLE OF t1;
3 常用函数
—3.1 常用函数概述
SQL函数的主要分类包括:(SQL函数指的是数据库内置函数,可以运用在SQL语句中实现特定的功能)
✔ 单行函数(本课程主要介绍常用的单行函数)
✔ 多行函数
单行函数对于每一行数据进行计算后得到一行输出结果。
✔ 单行函数的基本特性
1.单行函数对单行操作
2.每行返回一个结果
3.有可能返回值与原参数数据类型不一致
4.单行函数可以写在 SELECT、WHERE、ORDER BY 子句中
5.有些函数没有参数,有些函数包括一个或多个参数
6.函数可以嵌套
✔ 根据数据类型分为 字符函数、数值函数、日期函数、转换函数 以及其他通用的函数等。
1.字符函数:主要用于字符串与字符串、字符串与非字符串之间的连接,以及字符串的模式匹配操作。
2.数值函数:主要用于数字操纵和数学计算等操作,如绝对值、平方根、随机值等。
3.日期函数:主要用于获取系统时间,日期、时间类型的计算与格式化,如日期差值计算、日期截取等。
3.转换函数:主要用于将一种数据类型转换成另一种数据类型,常见如数值与字符类型、字符与日期类型之间的转换以及转换时的格式化方式等。
—3.2 常用字符函数
——3.2.1 ascii(string)
描述:参数string的第一个字符的ASCII码。返回值类型integer
示例: gbase=# SELECT ascii('xyz'); ascii ------- 120 (1 row)
——3.2.2 btrim(string text [, characters text])
描述:从string开头和结尾删除只包含characters中字符(缺省是空白)的最长字符串。返回值类型:text
示例: gbase=# SELECT btrim('sring' , 'ing'); btrim ------- sr (1 row)
——3.2.3 ltrim(string [, characters])
描述:从字符串string的开头删除只包含characters中字符(缺省是一个空白)的最长的字符串。返回值类型:varchar
示例: gbase=# SELECT ltrim('xxxxTRIM','x'); ltrim ------- TRIM (1 row)
——3.2.4 rtrim(string [, characters]
描述:从字符串string的结尾删除只包含characters中字符(缺省是个空白)的最长的字符串。返回值类型:varchar
示例: gbase=# SELECT rtrim('trimxxxx', 'x'); rtrim ------- trim (1 row)
——3.2.5 upper(string)
描述:把字符串转化为大写。返回值类型:varchar
示例: gbase=# SELECT upper('tom'); upper -------TOM (1 row)
——3.2.6 lower(string)
描述:把字符串转化为小写。返回值类型:varchar
示例: gbase=# SELECT lower('TOM'); lower ------- tom (1 row)
——3.2.7 concat(str1,str2)
描述:将字符串str1和str2连接并返回。返回值:varchar
示例: gbase=# SELECT concat('Hello', ' World!'); concat -------------- Hello World! (1 row)
——3.2.8 replace(string, substring)
描述:删除字符串string里出现的所有子字符串substring的内容。string 类型:text; substring类型:text 。返回值类型:text
示例: gbase=# SELECT replace('abcdefabcdef', 'cd'); replace ---------------- abefabef (1 row)
——3.2.9 reverse(str)
描述:返回颠倒的字符串。返回值:text
示例: gbase=# SELECT reverse('abcde'); reverse --------- edcba (1 row)
——3.2.10 substrb(text,int,int)
描述:提取子字符串,第一个int表示提取的起始位置,第二个表示提取几位字符。返回值类型:text
示例: gbase=# SELECT substrb('string',2,3); substrb --------- tri (1 row)
——3.2.11 其它常用字符函数
—3.3 数字操作符
—3.4 常用数值函数
——3.4.1 abs(exp), cos(exp), sin(exp)
返回表达式的绝对值,余弦值,正弦值。
示例: gbase=# abs(-10), cos(0), sin(0); ABS | COS | SIN ------+-------+-------- 10 | 1 | 0 (1 row)
——3.4.2 bitand(integer, integer)
描述:计算两个数字与运算(&)的结果。返回值类型: bigint类型数字
示例: gbase=# SELECT bitand(127, 63); bitand -------- 63 (1 row)
——3.4.3 acos(exp), asin(exp)
返回表达式的反余弦值和反正弦值。
示例: gbase=# SELECT acos(1), asin(0); ACOS | ASIN ------+-------- 0 | 0 (1 row)
——3.4.4 random()
描述:0.0到1.0之间的随机数。返回值类型: double precision
示例: gbase=# SELECT random(); random ------------------ .824823560658842 (1 row)
——3.4.5 其它常用数值函数
—3.5 常用时间和日期函数
—3.6 时间日期操作符—(+、-、*、/)
—3.7 类型转换函数
——3.7.1 cast(x as y)
描述:类型转换函数,将x转换成y指定的类型。
示例: gbase=# SELECT cast('22-oct-1997' as timestamp); timestamp --------------------- 1997-10-22 00:00:00 (1 row)
——3.7.2 to_char(int, fmt)
描述:将整数类型的值转换为指定格式的字符串。fmt表示格式化方式。返回值类型: text
示例: gbase=# SELECT to_char(125, '999'); to_char --------- 125 (1 row)
——3.7.3 to_date(text,fmt)
描述:将字符串类型的值转换为指定格式的日期。 fmt表示格式化方式。
示例: gbase=# SELECT to_date('05 Dec 2000', 'DD Mon YYYY'); to_date --------------------- 2000-12-05 00:00:00 (1 row)
——3.7.4 to_number ( expr [, fmt])
描述:将expr按指定格式转换为一个NUMBER类型的值。fmt表示格式化方式。
示例: gbase=# SELECT to_number('12,454.8-', '99G999D9S'); to_number ----------- -12454.8 (1 row)
——3.7.5 to_timestamp(text, fmt)
描述:将字符串类型的值转换为指定格式的时间戳。fmt表示格式化方式。
示例: gbase=# SELECT to_timestamp('05 Dec 2000', 'DD Mon YYYY'); to_timestamp --------------------- 2000-12-05 00:00:00 (1 row)
——3.7.6 to_bigint(varchar)
描述:将字符类型转换为bigint类型。
示例: gbase=# SELECT to_bigint('123364545554455'); to_bigint ---------------- 123364545554455 (1 row)
—3.8 日期\时间格式化模板
—3.9 数值格式化模板
—3.10 思考题
(1)select to_char(3148.5, '9G999D999') as result; 的执行结果是_______
(2)select to_char(interval '15h 2m 12s', 'HH24:MI:SS') as result; 的执行结果是_______
4 操作示例
/* ***************************************************** 以下命令为 linux 命令 ************************************************** */
--- su 命令切换到数据库用户 gbase,如果当前用户已为 gbase 用户,则忽略此条命令。
su - gbase
--- linux 命令:gsql 使用默认端口 连接数据库
gsql -d postgres -p 5432
/* ****************************************************** 以下都为sql命令 ******************************************************* */
--- gsql 连接成功后,将以下 sql 逐条在gsql中执行,进行验证。(若使用dbeaver工具,dbeaver 连接成功后,复制粘贴以下sql 执行进行验证)
/* ********************************************************* 数据类型 ********************************************************** */
/*************************************************/
/***** 1.1 整数类型 *****/
/*************************************************/
--- 创建具有TINYINT类型数据的表。
CREATE TABLE int_type_t1 (IT_COL1 TINYINT);
--- 向创建的表中插入数据。
INSERT INTO int_type_t1 VALUES(10);
--- 查看数据。
SELECT * FROM int_type_t1;
--- 删除表。
DROP TABLE int_type_t1;
--- 创建具有TINYINT,SMALLINT,INTEGER,BIGINT类型数据的表。
CREATE TABLE int_type_t2 (a TINYINT, b SMALLINT, c INTEGER, d BIGINT);
--- 插入数据。
INSERT INTO int_type_t2 VALUES(10, 100, 1000, 10000);
--- 查看数据。
SELECT * FROM int_type_t2;
--- 删除表。
DROP TABLE int_type_t2;
/*************************************************/
/***** 1.2 任意精度类型 *****/
/*************************************************/
--- 创建表。
CREATE TABLE decimal_type_t1 (DT_COL1 DECIMAL(10,4));
--- 插入数据。
INSERT INTO decimal_type_t1 VALUES(123456.122331);
--- 查询表中的数据。
SELECT * FROM decimal_type_t1;
--- 删除表。
DROP TABLE decimal_type_t1;
--- 创建表。
CREATE TABLE numeric_type_t1 (NT_COL1 NUMERIC(10,4));
--- 插入数据。
INSERT INTO numeric_type_t1 VALUES(123456.12354);
--- 查询表中的数据。
SELECT * FROM numeric_type_t1;
--- 删除表。
DROP TABLE numeric_type_t1;
/*************************************************/
/***** 1.3 序列整数类型 *****/
/*************************************************/
--- 创建表。
CREATE TABLE serial_type_tab(b SERIAL);
--插入数据。
INSERT INTO serial_type_tab VALUES(default);
INSERT INTO serial_type_tab VALUES(default);
--- 查看数据。
SELECT * FROM serial_type_tab;
/*************************************************/
/***** 1.4 浮点类型 *****/
/*************************************************/
--- 创建表。
CREATE TABLE float_type_t2 (
FT_COL1 INTEGER,
FT_COL2 FLOAT4,
FT_COL3 FLOAT8,
FT_COL4 FLOAT(3),
FT_COL5 BINARY_DOUBLE,
FT_COL6 DECIMAL(10,4),
FT_COL7 INTEGER(6,3)
);
--- 插入数据。
INSERT INTO float_type_t2 VALUES(10,10.365456,123456.1234,10.3214, 321.321, 123.123654, 123.123654);
--- 查看数据。
SELECT * FROM float_type_t2 ;
--- 删除表。
DROP TABLE float_type_t2;
/*************************************************/
/***** 2. 字符类型 ******/
/*************************************************/
--- (1) 定长字符类型
--- 创建表
CREATE TABLE char_type_t1 (CT_COL1 CHARACTER(4));
--- 插入数据
INSERT INTO char_type_t1 VALUES ('ok');
--- 查询表中的数据
SELECT ct_col1, char_length(ct_col1) FROM char_type_t1;
--- 删除表
DROP TABLE char_type_t1;
--- (2)变长字符类型
--- 创建表
CREATE TABLE char_type_t2 (CT_COL1 VARCHAR(5));
--- 插入数据
INSERT INTO char_type_t2 VALUES ('ok');
INSERT INTO char_type_t2 VALUES ('good');
--- 插入的数据长度超过类型规定的长度报错。
INSERT INTO char_type_t2 VALUES ('too long');
--ERROR: value too long for type character varying(5)
--- 明确类型的长度,超过数据类型长度后会自动截断。
INSERT INTO char_type_t2 VALUES ('too long'::varchar(5));
--- 查询数据
SELECT ct_col1, char_length(ct_col1) FROM char_type_t2;
--- 删除数据
DROP TABLE char_type_t2;
/*************************************************/
/***** 3. 时间日期类型 ******/
/*************************************************/
---(1)date类型
--- 创建表
CREATE TABLE date_type_tab(coll date);
--- 插入数据
INSERT INTO date_type_tab VALUES (date '5-10-2022');
--- 查看数据
SELECT * FROM date_type_tab;
--- 删除表
DROP TABLE date_type_tab;
---(2)time、timestamp类型
--- 创建表
CREATE TABLE time_type_tab (
da time without time zone ,
dai time with time zone,
dfgh timestamp without time zone,
dfga timestamp with time zone,
vbg smalldatetime);
--- 插入数据
INSERT INTO time_type_tab VALUES ('21:21:21','21:21:21 pst','2010-12-12','2013-12-11 pst','2003-04-12 04:05:06');
--- 查看数据
SELECT * FROM time_type_tab;
--- 删除表
DROP TABLE time_type_tab;
---(3)时间间隔类型
--- 创建表
CREATE TABLE day_type_tab (a int,b INTERVAL DAY(3) TO SECOND (4));
--- 插入数据
INSERT INTO day_type_tab VALUES (1, INTERVAL '3' DAY);
--- 查看数据
SELECT * FROM day_type_tab;
--- 删除表
DROP TABLE day_type_tab;
--- 创建表
CREATE TABLE year_type_tab(a int, b interval year (6));
--- 插入数据
INSERT INTO year_type_tab VALUES(1,interval '2' year);
--- 查看数据
SELECT * FROM year_type_tab;
--- 删除表
DROP TABLE year_type_tab;
/*************************************************/
/***** 4. 二进制类型 ******/
/*************************************************/
--- 创建表
CREATE TABLE blob_type_t1 (BT_COL1 INTEGER, BT_COL2 BLOB, BT_COL3 RAW, BT_COL4 BYTEA) ;
--- 插入数据
INSERT INTO blob_type_t1 VALUES(10,empty_blob(), HEXTORAW('DEADBEEF'),E'\\xDEADBEEF');
--- 查询表中的数据
SELECT * FROM blob_type_t1;
--- 删除表
DROP TABLE blob_type_t1;
/*************************************************/
/***** 5. 布尔类型 ******/
/*************************************************/
--- 创建表
CREATE TABLE bool_type_t1 (id serial, BT_COL1 BOOLEAN, BT_COL2 TEXT);
--- 插入数据
INSERT INTO bool_type_t1 (BT_COL1, BT_COL2) VALUES (TRUE, 'sic est');
INSERT INTO bool_type_t1 (BT_COL1, BT_COL2) VALUES (FALSE, 'non est');
--- 查看数据
SELECT * FROM bool_type_t1;
SELECT * FROM bool_type_t1 WHERE bt_col1 = 't';
--- 删除表
DROP TABLE bool_type_t1;
/*************************************************/
/***** 6. 位串类型 ******/
/*************************************************/
--- 创建表
CREATE TABLE bit_type_t1 (BT_COL1 INTEGER, BT_COL2 BIT(3), BT_COL3 BIT VARYING(5)) ;
--- 插入数据
INSERT INTO bit_type_t1 VALUES(1, B'101', B'00');
--- 插入数据的长度不符合类型的标准会报错
INSERT INTO bit_type_t1 VALUES(2, B'10', B'101');
--ERROR: dn2: bit string length 2 does not match type bit(3)
--- 将不符合类型长度的数据进行转换
INSERT INTO bit_type_t1 VALUES(2, B'10'::bit(3), B'101');
--- 查看数据
SELECT * FROM bit_type_t1;
--- 删除表
DROP TABLE bit_type_t1;
/*************************************************/
/***** 7. 自定义数据类型 *****/
/*************************************************/
--- 创建一种复合类型,建表并插入数据以及查询。
CREATE TYPE test_type1 AS ( f1 int, f2 text );
CREATE TABLE t1 ( a int, b test_type1 );
INSERT INTO t1 values ( 1,( 1, 'demo' ) );
SELECT (b).f1 FROM t1 ;
--- 创建一个枚举类型,建表并插入枚举值
CREATE TYPE test_type2 AS ENUM ('create', 'modify', 'closed');
CREATE TABLE t2 ( a int, b test_type2 );
INSERT INTO t2 values ( 1,'create' );
--- 插入一个在 test_type2 中未定义的值时,将报错
INSERT INTO t2 values ( 1,'new' );
--- ERROR: invalid input value for enum test_type2: "new"
--- 创建一个集合类型
CREATE TYPE test_type3 AS TABLE OF t1;
--- 删除表
DROP TABLE t1 CASCADE;
DROP TABLE t2 CASCADE;
--- 删除自定义类型
DROP TYPE test_type1;
DROP TYPE test_type2;
/* ********************************************************* 常用函数 ********************************************************** */
/*************************************************/
/***** 1.字符处理函数和操作符 *****/
/*************************************************/
--- ascii(string) :参数string的第一个字符的ASCII码。
select ascii('xyz');
--- btrim(string text [, characters text]):从string开头和结尾删除只包含characters中字符(缺省是空白)的最长字符串。返回值类型:text
SELECT btrim('sring' , 'ing');
--- ltrim(string [, characters]):从字符串string的开头删除只包含characters中字符(缺省是一个空白)的最长的字符串。
SELECT ltrim('xxxxTRIM','x');
--- rtrim(string [, characters]):从字符串string的结尾删除只包含characters中字符(缺省是个空白)的最长的字符串。
SELECT rtrim('trimxxxx', 'x');
--- upper(string):把字符串转化为大写。
SELECT upper('tom');
--- lower(string):把字符串转化为小写。
SELECT lower('TOM');
--- concat(str1,str2):将字符串str1和str2连接并返回。
SELECT concat('Hello', ' World!');
--- replace(string, substring):删除字符串string里出现的所有子字符串substring的内容。string 类型:text substring类型:text 。
SELECT replace('abcdefabcdef', 'cd');
--- reverse(str):返回颠倒的字符串。
SELECT reverse('abcde');
--- substrb(text,int,int):提取子字符串,第一个int表示提取的起始位置,第二个表示提取几位字符。
SELECT substrb('string',2,3);
--- bit_length(string) :返回字符串的位数
SELECT bit_length('world');
--- char_length(string) :返回字符串中字符的个数
SELECT char_length('hello');
--- lengthb(text/bpchar):返回指定字符串的字节数。
SELECT lengthb('hello');
--- position(substring in string):返回指定子字符串的位置。字符串区分大小写。
SELECT position('ing' in 'string');
--- string || non-string或non-string || string 描述:连接字符串和非字符串。
SELECT 'Value: '||42 AS RESULT;
SELECT 'GBase'||'8c' AS RESULT;
--- initcap(string) :将字符串中的每个单词的首字母转化为大写, 其他字母转化为小写。
SELECT initcap('hi THOMAS');
--- right(str text, n int) :返回字符串中的后n个字符。
SELECT right('abcde', 2);
--- left(str text, n int) :返回字符串中的前n个字符。
SELECT left('abcde', 2);
/*************************************************/
/***** 2. 数字操作符和函数 ******/
/*************************************************/
--- abs(exp), cos(exp), sin(exp): 返回表达式的绝对值,余弦值,正弦值。
SELECT abs(-10), cos(0), sin(0);
--- bitand(integer, integer):计算两个数字与运算(&)的结果。
SELECT bitand(127, 63);
--- acos(exp), asin(exp): 返回表达式的反余弦值和反正弦值。
SELECT acos(1), asin(0);
--- random():0.0到1.0之间的随机数。
SELECT random();
--- ceil(x): 不小于参数的最小的整数。
SELECT ceil(-42.8);
--- floor(x): 不大于参数的最大整数。
SELECT floor(-42.8);
--- ln(x): 自然对数。
SELECT ln(2.0);
--- log(x): 以10为底的对数。
SELECT log(100.0);
--- round(x): 离输入参数最近的整数。
SELECT round(42.6);
--- sign(x): 输出此参数的符号。-1表示负数,0表示0,1表示正数。
SELECT sign(-8.4);
--- trunc(x): 截断(取整数部分)。
SELECT trunc(42.8);
--- trunc(v numeric, s int): 截断为s位小数。
SELECT trunc(42.4382, 2);
/*************************************************/
/***** 3. 日期时间处理函数 ******/
/*************************************************/
--- age(timestamp, timestamp): 将两个参数相减,并以年、月、日作为返回值。若相减值为负,则函数返回亦为负。
--- 两个参数类型必须相同,可以都带timezone,或都不带timezone。
SELECT age(timestamp '2001-04-10', timestamp '1957-06-13');
--- clock_timestamp(): 实时时钟的当前时间戳。
SELECT clock_timestamp();
--- current_date: 当前日期。
SELECT current_date;
--- current_timestamp: 当前日期及时间。
SELECT current_timestamp;
--- date_trunc(text, timestamp): 截取到参数text指定的精度。
SELECT date_trunc('hour', timestamp '2001-02-16 20:38:40');
--- trunc(timestamp): 默认按天截取。
SELECT trunc(timestamp '2001-02-16 20:38:40');
--- now(): 当前日期及时间。
SELECT now();
--- add_months(d,n): 用于计算时间点d再加上n个月的时间。
SELECT add_months(to_date('2017-5-29', 'yyyy-mm-dd'), 11) FROM sys_dummy;
--- last_day(d): 用于计算时间点d当月最后一天的时间。
SELECT last_day(to_date('2017-01-01', 'YYYY-MM-DD')) AS cal_result;
--- 时间日期操作符—(+)
SELECT date '2001-9-28' + integer '7' AS RESULT;
SELECT date '2001-09-28' + interval '1 hour' AS RESULT;
SELECT date '2001-09-28' + time '03:00' AS RESULT;
SELECT interval '1 day' + interval '1 hour' AS RESULT;
SELECT timestamp '2001-09-28 01:00' + interval '23 hours' AS RESULT;
SELECT time '01:00' + interval '3 hours' AS RESULT;
--- 时间日期操作符—(-)
SELECT date '2001-10-01' - integer '7' AS RESULT;
SELECT date '2001-09-28' - interval '1 hour' AS RESULT;
SELECT time '05:00' - time '03:00' AS RESULT;
--- 时间日期操作符—(*)
SELECT 900 * interval '1 second' AS RESULT;
SELECT 21 * interval '1 day' AS RESULT;
SELECT double precision '3.5' * interval '1 hour' AS RESULT;
--- 时间日期操作符—(/)
SELECT interval '1 hour' / double precision '1.5' AS RESULT;
/*************************************************/
/***** 4. 类型转换函数 *****/
/*************************************************/
--- cast(x as y):类型转换函数,将x转换成y指定的类型。
SELECT cast('22-oct-1997' as timestamp);
--- to_char(int, text):将整数类型的值转换为指定格式的字符串。
SELECT to_char(125, '999');
--- to_date(text,fmt):将字符串类型的值转换为指定格式的日期。
SELECT to_date('05 Dec 2000', 'DD Mon YYYY');
--- to_number ( expr [, fmt]):将expr按指定格式转换为一个NUMBER类型的值。
SELECT to_number('12,454.8-', '99G999D9S');
--- to_timestamp(text, text):将字符串类型的值转换为指定格式的时间戳。
SELECT to_timestamp('05 Dec 2000', 'DD Mon YYYY');
-- to_bigint(varchar):将字符类型转换为bigint类型。
SELECT to_bigint('123364545554455');