ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

GBase 8a 支持数据类型

2021-11-30 11:30:27  阅读:189  来源: 互联网

标签:TIMESTAMP 8a 数据类型 gbase productDate products Query TABLE GBase


GBase 8a 支持 SQL92 中定义的大多数数据类型,同时也支持 SQL99 和 SQL2000 中定义的数据类型。 GBase 8a 支持的数据类型,如下所示:

1.数值类型

1.GBase 8a 支持数据类型包括严格的数值数据类型(TINYINT,INT,BIGINT, DECIMAL),以及近似的数值数据类型(FLOAT,DOUBLE)。 为了更有效地使用存储空间,请用户尽量使用最精确的类型。例如,如果 一个整数列被用于在 1~127 之间的值,TINYINT 是最好的类型。 为了存储更大范围的数值,用户可以选择 BIGINT 或 DECIMAL 类型。 作为 SQL92 标准的扩展,GBase 8a 也支持整数类型 TINYINT,SMALLINT 和 BIGINT。

1.1TINYINT 整数类型,TINYINT 范围是-127 到 127。TINYINT 占用 1 个字节。

1.2 SMALLINT 整数类型。SMALLINT 范围是-32767 到 32767。SMALLINT 占用 2 个字节。

1.3 INT 整数类型。INTEGER 的同义词。INT 范围是-2147483647 到 2147483647。 INT 占用 4 个字节。

1.4 BIGINT 整数类型。 BIGINT 范围是-9223372036854775806 到 9223372036854775806。 BIGINT 占用 8 个字节。 示例 1:定义的列数据类型为 BIGINT。

1.5 FLOAT FLOAT 代表一个浮点型数值,占用 4 个字节,它所存储的数值不是一个准 确值。允许的值是-3.402823466E+38 到-1.175494351E-38,0,1.175494351E-38 到 3.402823466E+38。这些是理论限制,基于 IEEE 标准。实际的范围根据硬件 或操作系统的不同可能稍微小些。 GBase 8a 允许在关键字 FLOAT 后面的括号内选择用位指定精度,即 FLOAT(X)。0 到 23 的精度对应 FLOAT 列的 4 字节单精度,24 到 53 的精度 对应DOUBLE列的8字节双精度。当24<=X<=53时,FLOAT(X)与DOUBLE(X)等价。同时 GBase 8a 允许使用非标准语法 FLOAT(M,D)(M 是整数位数和小数 位数的总位数,D 是小数的个数),GBase 8a 保存值时进行四舍五入。 示例 1:定义的列数据类型为 FLOAT。 示例中用到的表及数据: DROP TABLE IF EXISTS products; CREATE TABLE products(productnum FLOAT); INSERT INTO products(productnum) VALUES(-19000.44365), (-19000.48365),(1.44365),(1.443658); gbase> SELECT productnum FROM products; +------------+ | productnum | +------------+ | -19000.4 | | -19000.5 | | 1.44365 | | 1.44366 | +------------+ 4 rows in set 示例 2:定义的列数据类型为 FLOAT(M),总位数小于等于 23 时,小数 部分只保留一位有效数字,系统会自动对数字进行四舍五入。定义的列数据类型为 FLOAT(M),总位数大于 23 时,小数位最大支持 15 位数字。 示例中用到的表及数据: DROP TABLE IF EXISTS products; CREATE TABLE products (a FLOAT(20),b FLOAT(28)); INSERT INTO products (a,b) VALUES(-19000.44365,-19000.44365); gbase> SELECT * FROM products; +----------+--------------+ | a | b | +----------+--------------+ | -19000.4 | -19000.44365 | +----------+--------------+ 1 row in set 示例 3:定义的列数据类型为 FLOAT(7,4),插入的数据为 999.00009 时, 其近似值就是 999.0001,自动四舍五入。 示例中用到的表及数据: DROP TABLE IF EXISTS products; CREATE TABLE products(productnum FLOAT(7,4))INSERT INTO products(productnum) VALUES(999.00009); GBase 8a SQL 参考手册 南大通用数据技术股份有限公司 - 9 - gbase> SELECT productnum FROM products; +------------+ | productnum | +------------+ | 999.0001 | +------------+ 1 row in set 示例 4:定义的列数据类型为 FLOAT(26,5),指定精度为 5,则小数部分保 留 5 位数字。 示例中用到的表及数据: DROP TABLE IF EXISTS products; CREATE TABLE products(productnum FLOAT(26,5)); INSERT INTO products(productnum) VALUES(19000.44365); gbase> SELECT productnum FROM products; +-------------+ | productnum | +-------------+ | 19000.44336 | +-------------+ 1 row in set

1.6 DOUBLE DOUBLE 代表一个浮点型数值,占用 8 个字节,它所存储的数值不是一个 准确值。 允许的值是-1.7976931348623157E+308 到-2.2250738585072014E-308、0 和 2.2250738585072014E-308 到 1.7976931348623157E+308。这些是理论限制,基 于 IEEE 标准。实际的范围根据硬件或操作系统的不同可能稍微小些。 GBase 8a 允许在关键字 DOUBLE 后面的括号内选择用位指定精度,即 DOUBLE (X)。0 到 23 的精度对应 FLOAT 列的 4 字节单精度,24 到 53 的精 度对应 DOUBLE 列的 8 字节双精度。当 24<=X<=53>时,FLOAT(X)与 DOUBLE(X)等价。 同时 GBase 8a 允许使用非标准语法 DOUBLE(M,D)(M 是整数位数和小 数位数的总位数,D 是小数的个数),GBase 8a 保存值时进行四舍五入。 示例 1:定义的列数据类型为 DOUBLE。 示例中用到的表及数据: DROP TABLE IF EXISTS products; CREATE TABLE products(productnum DOUBLE); INSERT INTO products(productnum) VALUES(-19000.44365); gbase> DESC products; +------------+--------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+--------+------+-----+---------+-------+| productnum | double | YES | | NULL | | +------------+--------+------+-----+---------+-------+ 1 row in set gbase> SELECT productnum FROM products; +--------------+ | productnum | +--------------+ | -19000.44365 | +--------------+ 1 row in set

1.7 DECIMAL DECIMAL[(M[, D])]代表一个精确值,它所存储的数值范围是-(1E+M -1)/(1E+D)到(1E+M -1)/(1E+D)。 在 DECIMAL[(M[, D])]数据类型中,M 是总位数,支持的最大长度为 65; D 是小数点后面的位数,支持的最大长度为 30。 在不需要过高的数字精度的场景中,DECIMAL 中的 M 可以定义为 M≤18, 这样可以获得更好的查询性能。 DECIMAL 用来存储那些严格要求数字精度的数据,例如货币数据,在这种 情况下需要指定精度: salary DECIMAL(5,2)

2. 字符类型

2.1 CHAR CHAR(M) CHAR 类型仅仅是为了兼容 SQL 标准,因此,不建议使用者在实际的项目 应用场景使用此数据类型,建议使用 VARCHAR 数据类型。 CHAR 是 CHARACTER 的缩写。m 表示该列中字符串的长度,其范围是 1 到 255 个字符。 当存储 CHAR 值时,它们会被用空格右填充到指定长度。当读取 CHAR 值 时,填充的空格依旧保留。 如果给一个定义为 CHAR 类型的列插入一个超出最大长度的字符串,那么 将报告报错。 

2.2 VARCHAR VARCHAR(M) 可变长字符串。M 表示表示该列中串的长度。M 的范围是 1 到 10922 个字 符。 当存储 VARCHAR 类型的数据时,不会用空格填充补足列定义长度,存储 的数据包含空格时,保留空格。 示例 1:VARCHAR 数据类型不会补足列定义的长度,但会保留插入的数 据中的空格。示例中用到的表及数据: DROP TABLE IF EXISTS products; CREATE TABLE products (productName VARCHAR(100)); INSERT INTO products(productName) VALUES('南大通用'); INSERT INTO products(productName) VALUES('南大通用 '); gbase> SELECT productName, LENGTH(productName) AS length, CHAR_LENGTH(productName) AS char_length FROM products; +----------------+--------+-------------+ | productName | length | char_length | +----------------+--------+-------------+ | 南大通用 | 12 | 4 | | 南大通用 | 14 | 6 | +----------------+--------+-------------+ 2 rows in set gbase> SELECT productName FROM products WHERE productName = '南大通用'; +--------------+ | productName | +--------------+ | 南大通用 |+--------------+ 1 row in set 查询结果中保留原始数据中的空格: gbase> SELECT productName FROM products WHERE productName = '南大通用 '; +--------------+ | productName | +--------------+ | 南大通用 | +--------------+ 1 row in set

2.3TEXT  TEXT 类型仅仅是为了兼容其它数据库的类型,推荐使用 VARCHAR 类型。 TEXT 类型最大支持 10922 字符的存储长度,定义 TEXT 列时,不能为它指 定 DEFAULT 值。

3.二进制数据类型

BLOB 保存二进制数据,最大长度为 32767 字节。 使用 BLOB 数据类型,有如下约束:  BLOB 列支持 32KB 的存储容量。  创建表时,BLOB 列不可以有 DEFAULT 值。  查询语句中,BLOB 列不支持过滤条件。  查询语句中,BLOB 列不支持 OLAP 函数。

4. 日期和时间类型

当使用日期和时间类型时,用户应当提供正确的格式:如,YYYY-MM-DD、 YYYY-MM-DD HH:MI:SS。

4.1 DATE 日期类型。支持的范围是“0001-01-01”到“9999-12-31”。 GBase 8a 以“YYYY-MM-DD”格式显示 DATE 值。 示例 1:插入一个标准的 DATE 值。 gbase> DROP TABLE IF EXISTS products; Query OK, 0 rows affected gbase> CREATE TABLE products (productDate DATE); Query OK, 0 rows affected gbase> INSERT INTO products(productDate) VALUES('2010-09-01'); Query OK, 1 row affected gbase> SELECT productDate FROM products; +-------------+ | productDate | +-------------+ | 2010-09-01 |  +-------------+ 1 row in set  示例 2:插入一个 NULL 值。 gbase> DROP TABLE IF EXISTS products; Query OK, 0 rows affected gbase> CREATE TABLE products (productDate DATE); Query OK, 0 rows affected gbase> INSERT INTO products(productDate) VALUES(NULL); Query OK, 1 row affected gbase> SELECT productDate FROM products; +-------------+ | productDate | +-------------+ | NULL | +-------------+ 1 rows in set 示例 3:插入一个非法的 DATE 值,系统报告错误信息。 GBase 8a SQL 参考手册 南大通用数据技术股份有限公司 - 21 - gbase> DROP TABLE IF EXISTS products; Query OK, 0 rows affected gbase> CREATE TABLE products (productDate DATE); Query OK, 0 rows affected gbase> INSERT INTO products(productDate) VALUES('2010-09-31'); ERROR 1292 (22007): Incorrect date value: '2010-09-31' for column 'productDate' at row 1

4.2 TIME GBase 8a 以“HH:MI:SS”格式(或“HHH:MI:SS”格式)检索和显示 TIME 值,该值为字符串。 TIME 值的范围可以从“-838:59:59”到“838:59:59”。TIME 类型不仅可以 用于表示一天的时间(这一定不会超过 24 小时),而且可以用来表示所经过的 时间或两个事件之间的时间间隔(这可能比 24 小时大许多或是一个负值)。 对于以字符串指定的包含时间定界符的 TIME 值,不必要为小于 10 的时、 分或秒指定两位数值。“8:3:2”与“08:03:02”是一致的。 示例 1:插入一个合法的 TIME 值。 gbase> DROP TABLE IF EXISTS products; Query OK, 0 rows affectedgbase> CREATE TABLE products (productDate TIME); Query OK, 0 rows affected gbase> INSERT INTO products(productDate) VALUES('12:09:44'); Query OK, 1 row affected gbase> SELECT productDate FROM products; +-------------+ | productDate | +-------------+ | 12:09:44 | +-------------+ 1 row in set 示例 2:插入一个在“-838:59:59”到“838:59:59”之间,且超过 24 小时之 间的 TIME 值。 gbase> DROP TABLE IF EXISTS products; Query OK, 0 rows affected gbase> CREATE TABLE products (productDate TIME); Query OK, 0 rows affectedgbase> INSERT INTO products(productDate) VALUES('92:09:44'); Query OK, 1 row affected gbase> SELECT productDate FROM products; +-------------+ | productDate | +-------------+ | 92:09:44 | +-------------+ 1 row in set

4.3 DATETIME GBase 8a 以“YYYY-MM-DD HH:MI:SS.ffffff”格式显示 DATETIME 值。 其中 ffffff 表示微秒格式。 日期和时间的组合类型。支持的范围是“0001-01-01 00:00:00.000000”到 “9999-12-31 23:59:59.999999”。 示例 1:插入一个合法的 DATETIME 值。 gbase> DROP TABLE IF EXISTS products; Query OK, 0 rows affected gbase> CREATE TABLE products (productDate DATETIME); Query OK, 0 rows affectedgbase> INSERT INTO products(productDate) VALUES('2010-09-01 12:09:44'); Query OK, 1 row affected gbase> SELECT productDate FROM products; +---------------------+ | productDate | +---------------------+ | 2010-09-01 12:09:44 | +---------------------+ 1 row in set 示例 2:插入系统当前的 DATATIME 值。 gbase> DROP TABLE IF EXISTS products; Query OK, 0 rows affected gbase> CREATE TABLE products (productDate DATETIME); Query OK, 0 rows affected gbase> INSERT INTO products(productDate) VALUES(Now()); Query OK, 1 row affectedgbase> SELECT productDate FROM products; +---------------------+ | productDate | +---------------------+ | 2013-12-13 17:44:23 | +---------------------+ 1 row in set 示例 3:插入一个 NULL 值。 gbase> DROP TABLE IF EXISTS products; Query OK, 0 rows affected gbase> CREATE TABLE products (productDate DATETIME); Query OK, 0 rows affected gbase> INSERT INTO products(productDate) VALUES(NULL); Query OK, 1 row affected gbase> SELECT productDate FROM products; +-------------+ GBase 8a SQL 参考手册 - 26 - 南大通用数据技术股份有限公司 | productDate | +-------------+ | NULL | +-------------+ 1 row in set 示例 4:插入一个带有微秒的 DATETIME 数值。 gbase> INSERT INTO products(productDate) VALUES('2013-09-15 12:09:44.123456'); Query OK, 1 row affected gbase> SELECT productDate FROM products; +----------------------------+ | productDate | +----------------------------+ | 2013-09-15 12:09:44.123456 | +----------------------------+ 1 row in set 示例 5:插入一个非法的 DATETIME 值,系统将报告错误信息。 gbase> DROP TABLE IF EXISTS products; Query OK, 0 rows affectedgbase> CREATE TABLE products (productDate DATETIME); Query OK, 0 rows affected gbase> INSERT INTO products(productDate) VALUES('2010-09-31 12:09:44'); ERROR 1292 (22007): Incorrect datetime value: '2010-09-31 12:09:44' for column 'productDate' at row 1

4.4 TIMESTAMP TIMESTAMP 类型仅仅是为了兼容 SQL 标准,因此,不建议使用者在实际 的项目应用场景使用此数据类型,推荐使用 DATETIME 数据类型。 TIMESTAMP 的格式为“YYYY-MM-DD HH:MI:SS”,支持的范围是 “1970-01-01 08:00:01”到“2038-01-01 00:59:59”。 使用 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 属性时,TIMESTAMP 列支持 INSERT、UPDATE 以 及 MERGE 时,TIMESTAMP 列的值自动更新,但是 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 在一张表中只 能使用一次,也就是含有多个 TIMESTAMP 列时,只能给第一次出现 TIMESTAMP 的列使用 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 属性。 创建一张表时,如果只定义一个 TIMESTAMP 列,DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 可以省略,系 统会自动添加上。 示例:gbase> CREATE TABLE t (a int,b timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, c timestamp DEFAULT '2013-01-01 00:00:01'); Query OK, 0 rows affected gbase> SHOW CREATE TABLE t; +-------+--------------------------------------------------------------- -+ | Table | Create Table | +-------+--------------------------------------------------------------- -+ | t | CREATE TABLE "t" ( "a" int(11) DEFAULT NULL, "b" timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, "c" timestamp NOT NULL DEFAULT '2013-01-01 00:00:01' ) ENGINE=EXPRESS DEFAULT CHARSET=utf8 TABLESPACE='sys_tablespace' | +-------+--------------------------------------------------------------- -+ 1 row in set TIMESTAMP 使用限制: 以下限制说明,是针对 TIMESTAMP 数据列自动更新时的场景: 1. 在一张表中,只能自动更新表中第一个出现的 TIMESTAMP 列,并且 必须使用 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 来定义。 2. 在一张表中,使用 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 来指定 TIMESTAMP 列自动更新时,只能使 用一次,且用于第一个 TIMESTAMP 列。

感谢观看

标签:TIMESTAMP,8a,数据类型,gbase,productDate,products,Query,TABLE,GBase
来源: https://blog.csdn.net/weixin_62941622/article/details/121628609

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有