GBase 8c 学习笔记 007 —— 数据类型&常用函数

0    12    1

Tags:

👉 本文共约11897个字,系统预计阅读时间或需45分钟。

GBase 8c 学习笔记 007 —— 数据类型&常用函数

数据类型

  • 什么是数据
    • 数据是事实或观察的结果,是对客观事物的逻辑归纳,用于表示客观事物的未加工的原始素材。
  • 数据库中的数据类型
    • 在 GBase 8c 中,数据类型是数据的一个基本属性,用于区分不同类型的数据。不同的数据类型所占用的存储空间不同,能够进行的操作也不相同。
    • 数据库中的数据存储在数据表中,数据表中的每一列都定义了其数据类型。当用户存储数据时,需要遵循这些数据类型的属性定义,否则可能会出现报错或精度丢失等问题。在GBase 8c中,主要的数据类型有:
    • 常用的数据类型
      • 包括:数值类型、字符类型、日期类型等。
    • 非常用的数据类型
      • 包括:布尔类型、二进制类型、XML类型、几何类型等。
    • 自定义数据类型

数值类型——整数类型

整数类型描述存储空间范围
TINYINT微整数,别名为INT1。1字节0 ~ 255
SMALLINT小范围整数,别名为INT2。2字节-32,768 ~ +32,767
INTEGER常用的整数,别名为INT4。4字节-2,147,483,648 ~ +2,147,483,647
BINARY_INTEGERINTEGER的别名。4字节-2,147,483,648 ~ +2,147,483,647
BIGINT大范围的整数,别名为INT8。8字节-9,223,372,036,854,775,808 ~
+9,223,372,036,854,775,807
int16十六字节的大范围整数,目前不支持用于建表等使用。16字节-170,141,183,460,469,231,731,687,303,715,884,105,728 ~+170,141,183,460,469,231,731,687,303,715,884,105,727

GBase 8c 学习笔记 007 —— 数据类型&常用函数

数值类型——任意精度类型

任意精度类型描述存储空间范围
NUMERIC[ (p[,s])] DECIMAL[( p[,s])]精度p取值范围 [1,1000],标度s取值范围 [0,p]。 说明:p为总位数,s为小数位数。用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。
NUMBER[( p[,s])]NUMERIC 类型的别名。用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。

GBase 8c 学习笔记 007 —— 数据类型&常用函数

数值类型——序列整数类型

序列整数类型描述存储空间范围
SMALLSERIAL二字节序列整型。2字节-32,768 ~ +32,767
SERIAL四字节序列整型。4字节-2,147,483,648 ~ +2,147,483,647
BIGSERIAL八字节序列整型。8字节-9,223,372,036,854,775,808 ~+9,223,372,036,854,775,807
LARGESERIAL默认插入十六字节序列整形,实际类型和numeric相同。变长类型,每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。小数点前最大131,072位,小数点后最大16,383位。

GBase 8c 学习笔记 007 —— 数据类型&常用函数

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

数值类型——浮点类型

浮点类型描述存储空间范围
REAL, FLOAT4单精度浮点数4字节-3.402E+38~3.402E+38,6位十进制数字精度。
DOUBLE PRECISION, BINARY_DOUBLE, FLOAT8双精度浮点数8字节-1.79E+308~1.79E+308,15位十进制数字精度。
FLOAT [§]精度p取值范围为[1,53]。 说明:p为精度,表示总位数。4字节或8字节根据精度p不同选择REAL或DOUBLEPRECISION作为内部表示。如不指定精度,内部用DOUBLE PRECISION表示。

GBase 8c 学习笔记 007 —— 数据类型&常用函数

字符类型

字符类型描述存储空间
CHAR(n) CHARACTER(n) NCHAR(n)定长字符串,不足补空格。 n是指字节长度,如不带精度n,默认精度为1。最大为10MB。
VARCHAR(n) CHARACTER VARYING(n)变长字符串。不同的兼容模式下,n表示的含义不同,如:PG兼容模式下,n是字符长度。A兼容模式下,n指代字节长度。最大为10MB。
VARCHAR2(n)变长字符串。是VARCHAR(n)类型的别名。最大为10MB。
NVARCHAR2(n)变长字符串。n指代字符长度。最大为10MB。
NVARCHAR(n)变长字符串。是NVARCHAR2(n)类型的别名。最大为10MB。
TEXT变长字符串。最大为1GB-1, 但还需要考虑到列描述头信息的大小,以及列所在元组的大小限制(也小于1GB-1),因此TEXT类型最大大小可能小于1GB-1。
CLOB文本大对象。是TEXT类型的别名。最大为1GB-1,但还需要考虑到列描述头信息的大小, 以及列所在元组的大小限制(也小于1GB-1),因此CLOB类型最大大小可能小于1GB-1。

GBase 8c 学习笔记 007 —— 数据类型&常用函数

日期/时间类型

数据类型描述存储空间
DATE日期和时间。4字节,A兼容模式时8字节
TIME [§] [WITHOUT TIME ZONE]只用于一日内时间。 p 表示小数点后的精度,取值范围为0~6。8字节
TIME [§] [WITH TIME ZONE]只用于一日内时间,带时区。 p 表示小数点后的精度,取值范围为0~6。12字节
TIMESTAMP[§] [WITHOUT TIME ZONE]日期和时间。 p 表示小数点后的精度,取值范围为0~6。8字节
TIMESTAMP[§] [WITH TIME ZONE]日期和时间,带时区。别名为TIMESTAMPTZ。 p 表示小数点后的精度,取值范围为0~6。8字节
SMALLDATETIME日期和时间,不带时区。 精确到分钟,秒位大于等于30秒进一位。8字节
INTERVAL DAY (l) TO SECOND§时间间隔,X天X小时X分X秒。 l:天数的精度,取值范围为06。
p:秒数的精度,取值范围为06。
16字节
INTERVAL [fields] [ § ]时间间隔。fields 包括: YEAR,MONTH, DAY,HOUR,MINUTE, SECOND,DAY TO HOUR,DAY TO MINUTE,DAY TO SECOND,HOUR TO MINUTE, HOUR TO SECOND,MINUTE TO SECOND。 p:秒数的精度,取值范围为0~6。 fields 为 SECOND,DAY TO SECOND,HOUR TO SECOND或 MINUTE TO SECOND 时,参数 p 才有效。12字节

GBase 8c 学习笔记 007 —— 数据类型&常用函数

GBase 8c 学习笔记 007 —— 数据类型&常用函数

二进制类型

数据类型描述存储空间
BLOB二进制大对象最大为1GB-8203字节 (即1073733621字节)。
RAW变长的十六进制类型最大为1GB-8203字节 (即1073733621字节)。
BYTEA变长的二进制字符串最大为1GB-8203字节 (即1073733621字节)。

GBase 8c 学习笔记 007 —— 数据类型&常用函数

布尔类型

用于表示真假的数据类型。

数据类型描述存储空间
BOOLEAN布尔类型1字节
  • “真”值的有效文本值是:
    TRUE、‘t’、‘true’、‘y’、‘yes’、‘1’ 、‘TRUE’、true、整数范围内12^63-1、整数范围内-1-2^63。
  • “假”值的有效文本值是:
    FALSE、‘f’、‘false’、‘n’、‘no’、‘0’、0、‘FALSE’、false。
    使用TRUE和FALSE是比较规范的用法(也是SQL兼容的用法)。

GBase 8c 学习笔记 007 —— 数据类型&常用函数

位串类型

位串就是一串1和0的字符串。它们可以用于存储位掩码。

数据类型描述
bit(n)bit类型的数据必须准确匹配长度n,如果存储短或者长的数据都会报错。
bit varying(n)bit varying类型的数据是最长为n的变长类型,超过n的类型会被拒绝。
  • 如果用户明确地把一个位串值转换成bit(n),则此位串右边的内容将被截断或者在右边补齐零,直到刚好n位,而不会抛出任何错误。
  • 如果用户明确地把一个位串数值转换成bit varying(n),如果它超过了n位,则它的右边将被截断。

GBase 8c 学习笔记 007 —— 数据类型&常用函数

其他数据类型

分类数据类型描述
文本搜索类型tsvector表示为文本搜索优化的文件格式,一个唯一标准词位的有序列表。
文本搜索类型tsquery表示检索条件,存储用于检索的词汇。
UUID 类型uuidUUID是一个小写十六进制数字的序列,用来存储通用唯一标识符(UUID)。示例:a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
JSON\JSONB 类型JSON、JSONB用来存储JSON数据,可以是单独的标量,也可以是数组,或键值对象。
XML 类型xml用来存储XML(可扩展标记语言)数据。

自定义数据类型

用户还可以通过 CREATE TYPE 语句创建自定义类型,支持 5 种:

  • 复合类型 由一个属性名和数据类型的列表指定。复合类型本质上和表的行类型相同,但是如果只想定义一种类型,使用CREATE TYPE避免了创建一个实际的表。单独的复合类型也是很有用的,例如可以作为函数的参数或者返回类型
  • 基本类型 用户可以自定义一种新的基本类型(标量类型)。通常来说这些函数必须是底层语言所编写。
  • shell类型 是一种用于后面要定义的类型的占位符。在创建基本类型时,需要shell类型作为一种向前引用。
  • 枚举类型 由若干个标签构成的列表,每一个标签值都是一个非空字符串,且字符串长度不能超过63个字节。
  • 集合类型 类似数组,但是没有长度限制,主要在存储过程中使用。

GBase 8c 学习笔记 007 —— 数据类型&常用函数

常用函数

SQL函数的主要分类包括:(SQL函数指的是数据库内置函数,可以运用在SQL语句中实现特定的功能)

  • 单行函数(本课程主要介绍常用的单行函数)
  • 多行函数

单行函数 对于每一行数据进行计算后得到一行输出结果。

  • 单行函数的基本特性

    • 单行函数对单行操作
    • 单行函数可以写在 SELECT、WHERE、ORDER BY 子句中
    • 每行返回一个结果
    • 有些函数没有参数,有些函数包括一个或多个参数
    • 有可能返回值与原参数数据类型不一致
    • 函数可以嵌套
  • 根据数据类型分为

    字符函数、数值函数、日期函数、转换函数

    以及其他通用的函数等。

    • 字符函数:主要用于字符串与字符串、字符串与非字符串之间的连接,以及字符串的模式匹配操作。
    • 数值函数:主要用于数字操纵和数学计算等操作,如绝对值、平方根、随机值等。
    • 日期函数:主要用于获取系统时间,日期、时间类型的计算与格式化,如日期差值计算、日期截取等。
    • 转换函数:主要用于将一种数据类型转换成另一种数据类型,常见如数值与字符类型、字符与日期类型之间的转换以及转换时的格式化方式等。

常用字符函数

  • ascii(string)

描述:参数string的第一个字符的ASCII码。返回值类型integer

  • btrim(string text [, characters text])

描述:从string开头和结尾删除只包含characters中字符(缺省是空白)的最长字符串。返回值类型:text

  • ltrim(string [, characters])

描述:从字符串string的开头删除只包含characters中字符(缺省是一个空白)的最长的字符串。返回值类型:varchar

  • rtrim(string [, characters])

描述:从字符串string的结尾删除只包含characters中字符(缺省是个空白)的最长的字符串。返回值类型:varchar

  • upper(string)

描述:把字符串转化为大写。返回值类型:varchar

  • lower(string)

描述:把字符串转化为小写。返回值类型:varchar

  • concat(str1,str2)

描述:将字符串str1和str2连接并返回。返回值:varchar

  • replace(string, substring)

描述:删除字符串string里出现的所有子字符串substring的内容。string 类型:text substring类型:text 。返回值类型:text

  • reverse(str)

描述:返回颠倒的字符串。返回值:text

  • substrb(text,int,int)

描述:提取子字符串,第一个int表示提取的起始位置,第二个表示提取几位字符。返回值类型:text

GBase 8c 学习笔记 007 —— 数据类型&常用函数

GBase 8c 学习笔记 007 —— 数据类型&常用函数

其他常用字符函数

字符处理函数描述示例结果
bit_length(string)字符串的位数SELECT bit_length(‘world’);40
char_length(string)字符串中字符的个数SELECT char_length(‘hello’);5
position(substring in string)指定子字符串的位置。区分大小写。SELECT position(‘ing’ in ‘string’);4
string || string,string || non-string连接字符串,或连接字符串和非字符串。SELECT ‘GBase’||‘8c’;GBase8c
initcap(string)将字符串中的每个单词的首字母转化为大写,其他字母转化为小写。SELECT initcap(‘hi THOMAS’);Hi Thomas
right(str text, n int)返回字符串中的后n个字符。SELECT right ‘abcde’, 2);de
left(str text, n int)返回字符串中的前n个字符。SELECT left(‘abcde’, 2);ab

数字操作符

操作符描述
+
-
*
/除(除法操作符不进行取整)
%模运算
@绝对值
|/平方根
||/立方根
!!阶乘(前缀操作符)
|二进制OR
&二进制AND
#二进制XOR ~ 二进制NOT
^幂(指数运算)
<<左移位
>>右移位

常用数据函数

  • abs(exp), cos(exp), sin(exp): 返回表达式的绝对值,余弦值,正弦值。

  • bitand(integer, integer)

描述:计算两个数字与运算(&)的结果。返回值类型: bigint类型数字

  • acos(exp), asin(exp): 返回表达式的反余弦值和反正弦值。

  • random()

描述:0.0到1.0之间的随机数。返回值类型: double precision

GBase 8c 学习笔记 007 —— 数据类型&常用函数

其他常用数值函数

数值处理函数描述示例结果
ceil(x)不小于参数的最小的整数。select ceil(-42.8);-42
floor(x)不大于参数的最大整数。select floor(-42.8);-43
ln(x)自然对数。select ln(2.0);.6931471805599453
log(x)以10为底的对数。select log(100.0);2.0000000000000000
round(x)离输入参数最近的整数。select round(42.6);43
sign(x)输出此参数的符号。-1表示负数,0表示0,1表示正数。select sign(-8.4);
trunc(x)截断(取整数部分)。select trunc(42.8);42
trunc(v numeric, s int)截断为s位小数。select trunc(42.4382, 2);42.43

常用时间和日期函数

时间和日期函数描述示例结果
current_date当前时间。select current_date;2022-05-17
current_timestamp当前日期及时间。select current_timestamp;2022-05-17 16:35:08.018834+08
date_trunc(text, timestamp)截取到参数 text 指定的精度。select date_trunc(‘hour’, timestamp '2001-02-16 20:38:40’);2001-02-16 20:00:00
trunc(timestamp)默认按天截取。select trunc(timestamp ‘2001-02-16 20:38:40’);2001-02-16 00:00:00
now()当前日期及时间。now();2022-05-17 16:47:22.123899+08
add_months(d,n)用于计算时间点 d 再加上n 个月的时间。select add_months(to_date(‘2017-5-29’, ‘yyyy-mm-dd’), 11);2018-04-29 00:00:00
last_day(d)用于计算时间点 d 当月最后一天的时间。select last_day(to_date(‘2017-01-01’, ‘YYYY-MM-DD’));2017-01-31 00:00:00

GBase 8c 学习笔记 007 —— 数据类型&常用函数

时间日期操作符(+、-、*、/)

GBase 8c 学习笔记 007 —— 数据类型&常用函数

GBase 8c 学习笔记 007 —— 数据类型&常用函数

GBase 8c 学习笔记 007 —— 数据类型&常用函数

类型转换函数

  • cast(x as y)

描述:类型转换函数,将x转换成y指定的类型。

  • to_char(int, fmt)

描述:将整数类型的值转换为指定格式的字符串。fmt表示格式化方式。返回值类型: text

  • to_date(text,fmt)

描述:将字符串类型的值转换为指定格式的日期。 fmt表示格式化方式。

  • to_number ( expr [, fmt])

描述:将expr按指定格式转换为一个NUMBER类型的值。fmt表示格式化方式。

  • to_timestamp(text, fmt)

描述:将字符串类型的值转换为指定格式的时间戳。fmt表示格式化方式。

  • to_bigint(varchar)

描述:将字符类型转换为bigint类型。

GBase 8c 学习笔记 007 —— 数据类型&常用函数

日期\时间格式化模板

  • 小时
    • HH:一天的小时数(01-12)
    • HH12:一天的小时数(01-12)
    • HH24:一天的小时数(00-23)
    • MI:分钟(00-59)
    • SS:秒(00-59)
    • FF:微秒(000000-999999)
    • SSSSS:午夜后的秒(0-86399)
  • 上、下午
    • AM或A.M.:上午标识
    • PM或P.M.: 下午标识
    • Y,YYY:带逗号的年(4和更多位)
    • SYYYY:公元前四位年
    • YYYY:年(4和更多位)
    • YYY:年的后三位
    • YY:年的后两位
    • Y:年的最后一位
    • IYYY:ISO年(4位或更多位)
    • IYY:ISO年的最后三位
    • IY:ISO年的最后两位
    • I:ISO年的最后一位
    • RR:年的后两位(可在21世纪存储20世纪的年份)
    • RRRR:和YYYY相同。
    • BC或B.C.AD或A.D.:纪元标识。BC(公元前),AD(公元后)。
    • MONTH:全长大写月份名(空白填充为9字符)
    • MON:大写缩写月份名(3字符)
    • MM:月份数(01-12)
    • RM:罗马数字的月份(I-XII ;I=JAN)(大写)
    • DAY:全长大写日期名(空白填充为9字符)
    • DY:缩写大写日期名(3字符)
    • DDD:一年里的日(001-366)
    • DD:一个月里的日(01-31)
    • D:一周里的日(1-7 ;周日是 1)
    • W:一个月里的周数(1-5)(第一周从该月第一天开始)
    • WW:一年里的周数(1-53)(第一周从该年的第一天开始)
    • IW:ISO一年里的周数(第一个星期四在第一周里)
  • 世纪
    • CC: 世纪(2位)(21 世纪从 2001-01-01 开始)
  • 儒略日
    • J: 儒略日(自公元前 4712 年 1 月 1 日来的天数)
  • 季度
    • Q: 季度

数值格式化模板

模式描述
9数位(如果无意义可以被删除)
0数位(即便没有意义也不会被删除)
.(句号)小数点
,(逗号)分组(千)分隔符
PR尖括号内的负值
S带符号的数字(使用区域设置)
L货币符号(使用区域设置)
D小数点(使用区域设置)
G分组分隔符(使用区域设置)
MI在指明位置的负号(如果数字<0)
PL在指明位置的正号(如果数字>0)
SG在指定的位置的正/负号
RN罗马数字(输入在1~3999之间)
TH 或 th序数后缀
V移动指定位(小数)

参考

https://www.modb.pro/topic/619301

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部