这部分主要介绍在GBase 8s 分布式中使用的数值。包括字符串,数字,十六进制值,布尔值和NULL。
字符串是多个字符组成的一个字符序列,由单引号“'”或双引号“"”字符包围。
例如:'a string'
在一个字符串中,确定的序列具有特殊的含义,每个序列以反斜线符号“\”开头,称为转义字符。GBase 8s 分布式识别下列转义字符:
转义字符 | 描 述 |
\' | ASCII 39 单引号“'”字符。 |
\" | ASCII 34 双引号“"”字符。 |
\\ | ASCII 92 反斜线“\”字符。 |
这些符号是大小写敏感的。
在其它的所有转义字符中,忽略反斜线符号。换句话说,反斜线用来解释转义字符而不是被转义。
当字符串中包含引号时:
字符串用单引号“'”来引用的,该字符串中的单引号“'”字符可以用“''”方式转义。
用户也可以继续使用在引号前加一个转义字符“\”的方式进行转义。
字符串是用单引号“'”来引用的,该字符串中的双引号“"”不需要特殊对待而且不必被重复或转义。
下面的示例说明了SELECT语句对引号和转义是如何工作的。
示例1:使用单引号“'”,双引号“"”,转义字符“\”包围字符串。
gbase> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello' FROM t;
+-------+---------+-----------+--------+--------+
| hello | "hello" | ""hello"" | hel'lo | 'hello |
+-------+---------+-----------+--------+--------+
| hello | "hello" | ""hello"" | hel'lo | 'hello |
+-------+---------+-----------+--------+--------+
1 row in set
示例2:字符串中存在转义字符“\”。
gbase> SELECT 'This\nIs\nFour\nLines' FROM t;
+--------------------+
| This
Is
Four
Lines |
+--------------------+
| This
Is
Four
Lines |
+--------------------+
1 row in set
示例3:不存在转义含义时,忽略反斜线符号。
gbase> SELECT 'disappearing\ backslash' FROM t;
+------------------------+
| disappearing backslash |
+------------------------+
| disappearing backslash |
+------------------------+
1 row in set
如果用户想要把二进制数据插入到BLOB字段中,下列字符必须由转义序列表示:
字 符 | 描 述 |
NUL | NUL byte (ASCII 0)。需要用“\0”(一个反斜线和一个ASCII“0”字符)表示。 |
\ | 反斜线(ASCII 92)。需要用“\\”表示。 |
' | 单引号(ASCII 39)。需要用“\'”表示。 |
" | 双引号(ASCII 34)。需要用“\"”表示。 |
示例4:创建的表中productBlob字段的类型为BLOB,插入的数据中存在转义字符。
gbase> DROP TABLE IF EXISTS products;
Query OK, 0 rows affected
gbase> CREATE TABLE products (productBlob BLOB);
Query OK, 0 rows affected
gbase> INSERT INTO products values('abdcdrf\\ghi\'jklm\"nopqrs\0tuvwxyz');
Query OK, 1 row affected
gbase> SELECT productBlob FROM products;
+---------------------------------+
| productBlob |
+---------------------------------+
| abdcdrf\ghi'jklm"nopqrs tuvwxyz |
+---------------------------------+
1 row in set
当写程序代码时,任何一个字符串都有可能包含这些特殊的字符,因此在这些字符作为SQL语句中的数据传到GBase 8s 分布式之前必须进行适当的转义。
整数被表示为一个数字序列。浮点数使用“.”作为一个十进制数的分隔符。这两个数字类型可以前置“-”以表示一个负值。
有效整数的示例:
1221、0、-32
有效浮点数的示例:
-32032.6809E+10、148.00E+13
GBase 8s 分布式支持十六进制数值。
在数字的上下文语境中,它们作为数值等价于整数使用。
在字符串的上下文语境中,它们作为一个字符串,每一组十六进制数字被解释为对应ASCII码的字符。
示例1:0xa等价于整数10。
gbase> SELECT 0xa+1 FROM t;
+-------+
| 0xa+0 |
+-------+
| 11 |
+-------+
1 row in set
示例2:将“4742617365”转换成对应的ASCII码。
gbase> SELECT x'4742617365' FROM t;
+---------------+
| x'4742617365' |
+---------------+
| GBase |
+---------------+
1 row in set
示例3:将“5061756c”转换成对应的ASCII码。
gbase> SELECT 0x5061756c FROM t;
+------------+
| 0x5061756c |
+------------+
| Paul |
+------------+
1 row in set
表达式“x'hexstring'”是基于标准SQL的,表达式0x是基于ODBC的。二者是等价的。
示例4:使用HEX()函数可以将一个字符串或数值转换为一个十六进制格式的字符串。
gbase> SELECT HEX('cat') FROM t;
+------------+
| HEX('cat') |
+------------+
| 636174 |
+------------+
1 row in set
gbase> SELECT 0x636174 FROM t;
+----------+
| 0x636174 |
+----------+
| cat |
+----------+
1 row in set
常量TURE相当于1,而常量FALSE相当于0。
常量的名字对大小写不敏感。
示例1:查询TRUE和FALSE对应的值。
gbase> SELECT TRUE, true, FALSE, false FROM t;
+------+------+-------+-------+
| TRUE | TRUE | FALSE | FALSE |
+------+------+-------+-------+
| 1 | 1 | 0 | 0 |
+------+------+-------+-------+
1 row in set
注意,不支持直接使用 true/1, false/0 用于条件判断,如以下where条件不支持:
Select * from t1 where true; -- 不支持
Select * fromt1 where 1; -- 不支持
NULL不区分大小写。
注意:NULL值不同于数字类型的0或字符串类型的空串。




