常数值

SQL常量代表一个不变的值。

介绍

hubble中有五类常量:

  • 字符串文字:这些定义字符串值,但它们的实际数据类型将从上下文中推断出来,例如nihao
  • 数字文字:这些定义了数值,但它们的实际数据类型将从上下文中推断出来,例如-52.7
  • 位数组文字:这些定义了数据类型为 的位数组值 BIT,例如B'20020202'
  • 字节数组字面量:这些定义了数据类型为 的字节数组值BYTES。例如b'\141\
  • 解释文字:这些定义具有显式类型的任意值,例如INTERVAL '5 days'
  • 命名常量:这些具有预定义类型的预定义值,例如,TRUE

字符串文字

hubble支持以下字符串文字格式:

  • 标准 SQL字符串文字。
  • 带有C转义序列的字符串文字。
  • 美元符号引用的字符串文字。

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

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

标准SQL字符串文字

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

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

select 'nihao' as c, 'he''s a good boy' as d;
   c   |        d
--------+------------------
 nihao | he's a good boy

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

select 'nihao' 
' doctor!' as h;
       h
-----------------
  nihao doctor!

这种特殊语法仅在两个简单文字由换行符分隔时才有效,例如'hello' ' world!'不起作用,这是SQL标准规定的。

带有字符转义的字符串文字

hubble还支持包含转义序列的字符串文字,就像编程语言C中一样。这些文字是通过在字符串文字前加上字母来构造的e,例如e'nihao\nlisan!'

支持以下转义序列:

转义序列解释
\aASCII 代码 7(BEL)
\b退格(ASCII 8)
\t制表符(ASCII 9)
\n换行符(ASCII 10)
\v垂直制表符(ASCII 11)
\f换页 (ASCII 12)
\r回车(ASCII 13)
\xHH十六进制字节值
\ooo八进制字节值
\uXXXXASCII 代码 7 (BEL)
\a16 位十六进制 Unicode 字符值

美元符号引用的字符串文字

为了更容易在SQL代码中编写某些类型的字符串常量,hubble支持美元符号引用的字符串文字。这对于需要包含大量单引号 (') 或反斜杠 ()的字符串特别有用。

美元符号引用的字符串具有以下形式:$+(可选)标签 + $+ 任意文本 + $+(可选)标签 +$

例如:

SELECT char_length($MyCoolString$

For example, here is a regular expression using backticks: $myRegex$[foo\tbar]$myRegex$

Finally, you can use $stand-alone dollar signs without the optional tag$.$MyCoolString$);
 char_length
---------------
    165

位数组文字

位数组文字由B前缀后跟一串用单引号括起来的二进制数字(位)组成。

例如:B'1001010101'

字节数组文字

hubble支持两种字节数组字面量格式:

  • 带有 C转义序列的字节数组文字。
  • 十六进制编码的字节数组文字。

带有字符转义的字节数组文字

这使用与包含字符转义的字符串文字相同的语法,使用b前缀而不是e. 任何字符转义都被解释为字符串文字。

例如:b'nihao,\x32hubble'

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

  • 字节数组文字总是具有数据类型BYTES,而字符串文字的数据类型取决于上下文。
  • 字节数组文字可能包含无效的 UTF-8字节序列,而字符串文字必须始终包含有效的UTF-8序列。

十六进制编码的字节数组文字

这是一个hubble特定的扩展,用于表示字节数组文字:分隔符x'后跟任意十六进制数字序列,然后是结束符。

例如,以下格式都等效于b'cat'

  • x'636174'

命名常量

hubble识别以下SQL命名常量:

  • TRUEFALSE,数据类型的两个可能值BOOL
  • NULL,表示不存在值的特殊SQL符号。

NULL对于任何类型都是有效的常量:其在表达式评估期间的实际数据类型是根据上下文确定的。