SQL常量表示不会被更改的值。

介绍

CockroachDB中有五类常量:

String literals

CockroachDB 支持两种string literals格式:

这些格式还允许编码为UTF-8的任意Unicode字符。

在任何情况下,字符串的实际数据类型都是使用它出现的上下文来确定的。

例如:

表达式 字符串文本(literals)的数据类型
length('hello') STRING
now() + '3 day' INTERVAL
INSERT INTO tb(date_col) VALUES ('2013-01-02') DATE

通常,如果没有歧义,则字符串的数据类型是上下文所要求的数据类型,否则为“STRING”。

关于字符串文本(literals)的更多信息,请查看more information about the typing of string literals

标准SQL字符串文本(literals)

SQL字符串文本(literals)由单引号(')之间的任意字符序列组成,例如,'hello world'

要在字符串中包含单引号,请使用双引号,例如:

> SELECT 'hello' as a, 'it''s a beautiful day' as b;
+-------+----------------------+
|   a   |          b           |
+-------+----------------------+
| hello | it's a beautiful day |
+-------+----------------------+

为了与SQL标准兼容,CockroachDB还识别以下特殊语法:由换行符分隔的两个简单字符串文本(literals)会自动连接在一起形成一个常量,例如:

> SELECT 'hello'
' world!' as a;
+--------------+
|      a       |
+--------------+
| hello world! |
+--------------+

仅当两个简单文本(literals)由换行符分隔时,此特殊语法才有效, 例如 'hello' ' world!'就不行。 这是SQL标准的强制要求。

带字符转义的字符串文本(literals)

CockroachDB还支持包含转义序列的字符串文本(literals),如编程语言C中所示。这些字符串文本(literals)是通过在字符串文本(literals)前加上字母e来构造的,例如e'hello\ nworld!'

支持以下转义序列:

Escape Sequence Interpretation
\a ASCII code 7 (BEL)
\b backspace (ASCII 8)
\t tab (ASCII 9)
\n newline (ASCII 10)
\v vertical tab (ASCII 11)
\f form feed (ASCII 12)
\r carriage return (ASCII 13)
\xHH hexadecimal byte value
\ooo octal byte value
\uXXXX 16-bit hexadecimal Unicode character value
\UXXXXXXXX 32-bit hexadecimal Unicode character value

例如,e'x61\141\u0061'转义字符串表示十六进制字节,八进制字节和16位十六进制Unicode字符值,相当于aaa字符串文本(literals)。

数字文本(literals)

数字文本(literals)可以具有以下形式:

[+-]9999
[+-]9999.[9999][e[+-]999]
[+-][9999].9999[e[+-]999]
[+-]9999e[+-]999
[+-]0xAAAA

举例:

+4269
3.1415
-.001
6.626e-34
50e6
0xcafe111

数值常量的实际数据类型取决于使用它的上下文、其文本(literals)格式及其数值。

Syntax Possible data types
包含小数分隔符 FLOAT, DECIMAL
包含指数 FLOAT, DECIMAL
包含-2 ^ 63 ...(2 ^ 63)-1范围之外的值 FLOAT, DECIMAL
其他 INT, DECIMAL, FLOAT

在可能的数据类型中,根据上下文进一步细化实际使用的数据类型。

关于数字常量的更多信息,请查看 more information about the typing of numeric literals.

字节数组文本(literals)

CockroachDB 支持两种字节数组文本(literals)格式:

具有字符转义的字节数组文本(literals)

语法与包含字符转义的字符串文本(literals)相同,使用b前缀而不是e。任何字符转义解释形式与字符串文本(literals)一样。

例如: b'hello,\x32world'

字节数组文本(literals)和带字符转义的字符串文本(literals)之间的两个区别如下:

十六进制编码的字节数组文本(literals)

This is a CockroachDB-specific extension to express byte array literals: the delimiter x' or e'\\x followed by an arbitrary sequence of hexadecimal digits, followed by a closing '.

For example, all the following formats are equivalent to b'cat':

解释文本(literals)

可以使用以下任一格式来形成任何数据类型的常量:

type 'string'
'string':::type

字符串部分的值用作转换函数到指定数据类型的输入,结果用作该数据类型的常量。

Examples:

DATE '2013-12-23'
BOOL 'FALSE'
'42.69':::INT
'TRUE':::BOOL
'3 days':::INTERVAL

另外,为了与PostgreSQL兼容,符号'string':: typeCAST('string'AS type)也被识别为解释文本(literals)。

这些是cast expressions的特例

更多关于解释文本(literals)支持的格式信息,请参阅相应数据类型的“语法”部分: DATE, INET, INTERVAL, TIME,TIMESTAMP/TIMESTAMPTZ.

命名常量

CockroachDB识别以下SQL命名常量: - TRUEFALSE, 这是bool类型的两个可能值。 - NULL, 表示“无值存在”的特殊SQL符号。

请注意,NULL是任何类型的有效常量:表达式评估期间的实际数据类型是根据上下文确定的。

See Also