--- slug: /zh/sql-reference/ansi sidebar_position: 40 sidebar_label: "ANSI\u517C\u5BB9\u6027" --- # ClickHouse SQL方言 与ANSI SQL的兼容性{#ansi-sql-compatibility-of-clickhouse-sql-dialect} :::note 本文参考Annex G所著的[ISO/IEC CD 9075-2:2011](https://www.iso.org/obp/ui/#iso:std:iso-iec:9075:-2:ed-4:v1:en:sec:8)标准. ::: ## 行为差异 {#differences-in-behaviour} 下表列出了ClickHouse能够使用,但与ANSI SQL规定有差异的查询特性。 | 功能ID | 功能名称 | 差异 | | ------- | --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | E011 | 数值型数据类型 | 带小数点的数字被视为近似值 (`Float64`)而不是精确值 (`Decimal`) | | E051-05 | SELECT 的列可以重命名 | 字段重命名的作用范围不限于进行重命名的SELECT子查询(参考[表达式别名](https://clickhouse.com/docs/zh/sql-reference/syntax/#notes-on-usage)) | | E141-01 | NOT NULL(非空)约束 | ClickHouse表中每一列默认为`NOT NULL` | | E011-04 | 算术运算符 | ClickHouse在运算时会进行溢出,而不是四舍五入。此外会根据自定义规则修改结果数据类型(参考[溢出检查](https://clickhouse.com/docs/zh/sql-reference/data-types/decimal/#yi-chu-jian-cha)) | ## 功能状态 {#feature-status} | 功能ID | 功能名称 | 状态 | 注释 | | -------- | ---------------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **E011** | **数值型数据类型** | **部分**{.text-warning} | | | E011-01 | INTEGER (整型)和SMALLINT (小整型)数据类型 | 是 {.text-success} | | | E011-02 | REAL (实数)、DOUBLE PRECISION (双精度浮点数)和FLOAT(单精度浮点数)数据类型数据类型 | 是 {.text-success} | | | E011-03 | DECIMAL (精确数字)和NUMERIC (精确数字)数据类型 | 是 {.text-success} | | | E011-04 | 算术运算符 | 是 {.text-success} | | | E011-05 | 数值比较 | 是 {.text-success} | | | E011-06 | 数值数据类型之间的隐式转换 | 否 {.text-danger} | ANSI SQL允许在数值类型之间进行任意隐式转换,而ClickHouse针对不同数据类型有对应的比较函数和类型转换函数 | | **E021** | **字符串类型** | **部分**{.text-warning} | | | E021-01 | CHARACTER (字符串)数据类型 | 是 {.text-success} | | | E021-02 | CHARACTER VARYING (可变字符串)数据类型 | 是 {.text-success} | | | E021-03 | 字符字面量 | 是 {.text-success} | | | E021-04 | CHARACTER_LENGTH 函数 | 部分 {.text-warning} | 不支持 `using` 从句 | | E021-05 | OCTET_LENGTH 函数 | 否 {.text-danger} | 使用 `LENGTH` 函数代替 | | E021-06 | SUBSTRING | 部分 {.text-warning} | 不支持 `SIMILAR` 和 `ESCAPE` 从句,没有`SUBSTRING_REGEX` 函数 | | E021-07 | 字符串拼接 | 部分 {.text-warning} | 不支持 `COLLATE` 从句 | | E021-08 | 大小写转换 | 是 {.text-success} | | | E021-09 | 裁剪字符串 | 是 {.text-success} | | | E021-10 | 固定长度和可变长度字符串类型之间的隐式转换 | 部分 {.text-warning} | ANSI SQL允许在数据类型之间进行任意隐式转换,而ClickHouse针对不同数据类型有对应的比较函数和类型转换函数 | | E021-11 | POSITION 函数 | 部分 {.text-warning} | 不支持 `IN` 和 `USING` 从句,不支持`POSITION_REGEX`函数 | | E021-12 | 字符串比较 | 是 {.text-success} | | | **E031** | **标识符** | **部分**{.text-warning} | | | E031-01 | 分隔标识符 | 部分 {.text-warning} | Unicode文字支持有限 | | E031-02 | 小写标识符 | 是 {.text-success} | | | E031-03 | 标识符最后加下划线 | 是 {.text-success} | | | **E051** | **基本查询规范** | **部分**{.text-warning} | | | E051-01 | SELECT DISTINCT | 是 {.text-success} | | | E051-02 | GROUP BY 从句 | 是 {.text-success} | | | E051-04 | GROUP BY 从句中的列可以包含不在 `