SQL: Lexical Structure

 20th August 2020 at 2:19pm

内容来源于 PostgreSQL 文档

Identifier

可以用 双引号 包裹(quoted),也可以不包裹(unquoted):

-- Unquoted
UPDATE MY_TABLE SET A = 5;

-- Quoted
UPDATE "my_table" SET A = 5;
  • Unquoted:大小写不敏感。PG 会将其统一成小写;SQL 标准统一成大写
  • Quoted:大小写敏感

Identifier 可以用 Unicode:U&"d\0061t\+000061"

Constants

String Constants

字符串常量,用 单引号 包裹:'data'。同时可以用:

  • Unicode: U&'d\0061t\+000061'。注意这里是单引号,区别于 identifier 中的双引号
  • C-style escapes: E'Hello\nWorld'
  • Bit-String Constants: B'1001'
  • Dollar-quoted string constants: $$Dianne's horse$$

Dollar-quoted string constants 是比较奇怪的设计。当你的字符串常量中有单引号时,你需要写两个 '' 来表示:'Dianne''s horse'。Dollar-quoted 可以让你避免这种麻烦:

$$Dianne's horse$$
$SomeTag$Dianne's horse$SomeTag$

$$ 或者是 $SomeTag$ 包裹的部分即是字符串常量,不需要转义单引号 '

Numberic Constants

数值常量。略。

类型转换

语法:

CAST ( <expression> AS <type> )
<expression>::<type>

SQL 在设计上,除了数值之外的绝大部分类型,都支持接受一个字符串,再做类型转换成本类型。比如 date,支持 YYYY-mm-dd 字符串。INSERT INTO 时,如果传一个字符串给这种类型时,DB 会做隐式的类型转换,不需要你手动转。