暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase 8s SQL语言基础之数值

原创 Todd 2022-01-19
1409

这部分主要介绍在GBase 8s 分布式中使用的数值。包括字符串,数字,十六进制值,布尔值和NULL。

1、字符串

字符串是多个字符组成的一个字符序列,由单引号“'”或双引号“"”字符包围。

例如:'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 分布式之前必须进行适当的转义。

2、数字

整数被表示为一个数字序列。浮点数使用“.”作为一个十进制数的分隔符。这两个数字类型可以前置“-”以表示一个负值。

有效整数的示例:

1221、0、-32

有效浮点数的示例:

-32032.6809E+10、148.00E+13

3、十六进制值

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

 

4、布尔值

常量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; -- 不支持

 

5、NULL值

NULL不区分大小写。

注意:NULL值不同于数字类型的0或字符串类型的空串。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论