返回首页

gbase数据、南大通用产品文档:GBase8aexpr BETWEEN min AND max

更新日期:2024年09月11日

函数说明
如果expr 的值在min 和max 之间(包括min 和max),返回1,否则返回0。
若所有参数都是同一类型,则上述关系相当于表达式(min <= expr AND expr <=
max)。
其它类型的转换根据本章开篇所述规律进行,
且适用于三种参数中任意一种。

示例

示例1:所有参数为同一类型,expr 不在min 和max 中。
gbase> SELECT 1 BETWEEN 2 AND 3 FROM t;
+-------------------+
| 1 BETWEEN 2 AND 3 |
+-------------------+
| 0 |
+-------------------+
1 row in set

示例2:所有参数为同一类型,expr 在min 和max 中。
gbase> SELECT 'b' BETWEEN 'a' AND 'c' FROM t;
+-------------------------+
| 'b' BETWEEN 'a' AND 'c' |
+-------------------------+
| 1 |
+-------------------------+
1 row in set

示例3:参数中包含数字和字符串。
gbase> SELECT 2 BETWEEN 2 AND '3' FROM t;
+---------------------+
| 2 BETWEEN 2 AND '3' |
+---------------------+
| 1 |
+---------------------+
1 row in set

示例4:针对不同类型参数,HIVE 引擎返回结果会有所不同。例如:
gbase> SELECT 'b' BETWEEN 'a' AND 1 FROM test.t8a;--8a返回1

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 371
+-----------------------+
| 'b' BETWEEN 'a' AND 1 |
+-----------------------+
| 1 |
warnings, truncated incorrect DOUBLE value: 'b'

gbase> SELECT 'b' BETWEEN 'a' AND 1 FROM test_hive.tuph;--UP HIVE 返回NULL
+-----------------------+
| 'b' BETWEEN 'a' AND 1 |
+-----------------------+
| NULL |
原因:gbase 有隐式类型转换
select cast('a' as integer) ; -- 返回 0
select cast('b' as integer) ; --返回0
SELECT 'b' BETWEEN 'a' AND 1 FROM test.t8a;
相当于:
select 0 between 0 and 1 from test.t8a;
所以返回 1。

功能说明
INSERT 将新行插入到一个已存在的表中。INSERT...VALUES 形式的语句基于明
确的值插入记录行。INSERT ... SELECT 形式的语句从另一个或多个表中选取出
值,并将其插入。
语法格式
INSERT [INTO] [vc_name.][database_name.]table_name [(col_name,...)]
VALUES ({expr | DEFAULT},...),(...),...

INSERT [INTO] [vc_name.][database_name.]table_name [(col_name,...)]
SELECT ... FROM [vc_name.][database_name.]table_name ...
表5- 93 参数说明
参数名称


vc_name
虚拟集群名,可选项。
database_name
数据库名,可选项。
table_name
表名,是要被插入数据的表。
col_name
指出语句指定的值赋给哪个列。如果在INSERT...VALUES 或
INSERT...SELECT 中没有指定column 列,
那么所有列的值必
须在VALUES()列表中或由SELECT 提供。如果用户不知道
表的列的次序,可以使用DESC table_name 来查看。

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1045
参数名称


expr
指定一个表达式expr 来提供列值。例如插入一个INT 型的数
据表达式可以写为INSERT INTO t(a) VALUES(3+5)。
DEFAULT
使用关键词DEFAULT,明确地把列设置为默认值。使用
DEFAULT 可以避免编写出不完整的、未包含全部列值的
VALUES 清单。
可以使用DEFAULT (col_name)作为设置列默
认值的一个更通用的形式。如果不使用DEFAULT,
用户必须
注明每一个列的名称,与VALUES 中的每个值对应。
说明

如果column 列表和VALUES 列表都为空,
INSERT 将创建一个行,
它的每一列都设置为它的默认值。
示例
示例1:INSERT INTO... 。
gbase> CREATE TABLE t0(id int) REPLICATED;
Query OK, 0 rows affected
gbase> INSERT INTO t0 VALUES(1),(2),(3),(4),(5),(6),(2),(3),(1);
Query OK, 9 rows affected
Records: 9
Duplicates: 0
Warnings: 0
gbase> SELECT * FROM t0;
+------+
| id
|
+------+
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
2 |
|
3 |
|
1 |
+------+
9 rows in set
示例2:INSERT INTO...SELECT...。
gbase> CREATE TABLE t0(id int) REPLICATED;

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1046
Query OK, 0 rows affected
gbase> INSERT INTO t0(id) SELECT DISTINCT lo_custkey FROM
ssbm.lineorder LIMIT 15;
Query OK, 15 rows affected
Records: 15
Duplicates: 0
Warnings: 0
gbase> SELECT * FROM t0;
+-------+
| id
|
+-------+
| 25738 |
| 18238 |
| 20612 |
|
5393 |
|
5954 |
| 11728 |
| 17302 |
| 14578 |
|
2210 |
| 27362 |
|
1642 |
| 29255 |
| 10745 |
|
7180 |
| 16276 |
+-------+
15 rows in set
示例3:INSERT INTO ... VALUES(DEFAULT)。
gbase> CREATE TABLE t0(id int DEFAULT 1) REPLICATED;
Query OK, 0 rows affected
gbase> INSERT INTO t0 (id) VALUES(DEFAULT);
Query OK, 1 row affected
-- 也可以这样指定默认值进行插入
gbase> INSERT INTO t0 (id) VALUES(DEFAULT(id));
Query OK, 1 row affected
gbase> SELECT * FROM t0;
+------+
| id
|
+------+

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1047
|
1 |
|
1 |
+------+
2 rows in set
示例4:
INSERT 时,
自动更新TIMESTAMP 列。
使用INSERT INTO t1 VALUES(),()
语法时,
此时INSERT 完成后数据行对应的TIMESTAMP 列的值自动更新为一个
时间戳。b=6 和b=7 对应的TIMESTAMP 列自动更新为一个时间戳
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(a timestamp , b int) DISTRIBUTED BY ('b');
gbase> INSERT INTO t1(b) VALUES(1);
Query OK, 1 row affected
gbase> INSERT INTO t1(b) VALUES (2);
Query OK, 1 row affected
gbase> INSERT INTO t1(b) VALUES (3);
Query OK, 1 row affected
gbase> INSERT INTO t1(b) VALUES (4);
Query OK, 1 row affected
gbase> INSERT INTO t1(b) VALUES (5);
Query OK, 1 row affected
gbase> SELECT * FROM t1 ORDER BY a;
+---------------------+------+
| a
| b
|
+---------------------+------+
| 2013-12-17 14:04:43 |
1 |
| 2013-12-17 14:04:47 |
2 |
| 2013-12-17 14:04:52 |
3 |
| 2013-12-17 14:04:59 |
4 |
| 2013-12-17 14:05:04 |
5 |
+---------------------+------+
5 rows in set
gbase> INSERT INTO t1(b) VALUES (6),(7);
Query OK, 1 row affected
gbase> SELECT * FROM t1 ORDER BY a;
+---------------------+------+
| a
| b
|

GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1048
+---------------------+------+
| 2013-12-17 15:44:29 |
1 |
| 2013-12-17 15:44:30 |
2 |
| 2013-12-17 15:44:31 |
3 |
| 2013-12-17 15:44:32 |
4 |
| 2013-12-17 15:44:33 |
5 |
| 2013-12-17 15:44:48 |
7 |
| 2013-12-17 15:44:48 |
6 |
+---------------------+------+
7 rows in set

范围值的输入必须遵循下列模式之一:
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
empty

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
89
圆括号或方括号指示上下界是否为被排除或被包含的。empty 表示空范围。
lower-bound 可以是作为subtype 的合法输入的一个字符串,
或者是空表示没有下界。

样,upper-bound 可以是作为subtype 的合法输入的一个字符串,或者是空表示没有上界。

每个界限值可以使用"(双引号)字符引用。如果界限值包含圆括号、方括号、逗号、
双引号或反斜线时,
必须使用双引号。
否则那些字符认定为范围语法,
而非界限值内容。

如需把双引号或反斜线放在被引用的界限值中,则需在前面添加使用一个反斜线。

在双引号引用的界限值中的一对双引号,表示为双引号字符,这与SQL 字符串中的单
引号规则类似。

用户可以避免引用,
并且使用反斜线转义来保护所有数据字符,
否则它们会被当做返回
语法的一部分。

如需写一个空字符串的界限值,则可以写成""。什么都不写,默认表示一个无限界限。

范围值前后允许有空格,
但是圆括号或方括号之间的任何空格,
认定为上下界值的一部
分。
示例
-- 包括3,不包括7,并且包括3 和7 之间的所有点
gbase=# SELECT
'[3,7)'::int4range;
[3,7)
-- 既不包括3 也不包括7,但是包括之间的所有点
gbase=# SELECT '(3,7)'::int4range;
[4,7)
-- 只包括单独一个点4
gbase=# SELECT
'[4,4]'::int4range;
[4,5)
-- 不包括点(并且将被标准化为'空')
gbase=# SELECT '[4,4)'::int4range;
empty