# 数据类型

在数据处理功能中，每个列或表达式都有一个相关的数据类型。 数据类型描述（并约束）该类型的列可以容纳的一组值或可以产生的一组表达式。

## 支持的数据类型

以下是支持的数据类型的列表。

| # | 数据类型     | 描述                                                             |
|---|----------|----------------------------------------------------------------|
| 1 | bigint   | 整数型                                                            |
| 2 | float    | 浮点型                                                            |
| 3 | string   | 文本值，由 Unicode 字符组成。                                            |
| 4 | datetime | 日期时间类型。                                                        |
| 5 | boolean  | 布尔类型，值可以是 `true` 或者 `false`。                                    |
| 6 | bytea    | 用于存储二进制数据的字节数组。如果在格式为 "JSON" 的流中使用此类型，则传入的数据需要为 base64 编码的字符串。 |
| 7 | array    | 数组类型可以是简单数据或结构类型中的任何类型。                                        |
| 8 | struct   | 复杂类型。 名称/值对的集合。 值必须是受支持的数据类型。                                  |

## 比较和计算的兼容性

每个 sql 子句中可能都有二元操作。 在此示例中，`Select temperature * 2 from demo where temperature > 20`，在 select 子句中使用计算操作，在 where 子句中使用比较操作。 在二元操作中，如果使用了不兼容的数据类型，则会发生运行时错误并将其发送到目标。

数组和结构在任何二元操作中均不受支持。 下表列出了其他数据类型的兼容性。 而行标题是左操作数数据类型，列标题是右操作数数据。 关于兼容性的值，其中 Y 表示是，N 表示否。

| #        | bigint | float | string         | datetime | boolean |
|----------|--------|-------|----------------|----------|---------|
| bigint   | Y      | Y     | N              | N        | N       |
| float    | Y      | Y     | N              | N        | N       |
| string   | N      | N     | Y              | N        | N       |
| datetime | Y      | Y     | Y, 如满足日期时间默认格式 | Y        | N       |
| boolean  | N      | N     | N              | N        | Y       |

日期时间字符串的默认格式是 `"2006-01-02T15:04:05.000Z07:00"`

对于 `nil` 值，我们遵循以下规则：

1. 与 nil 比较总是返回 false
2. 用 nil 计算总是返回 nil

## 类型转换

可使用内置函数 `cast(col, targetType)` 在运行时进行显式类型转换。详情请参考 [cast](./functions/transform_functions.md)。
