# 数据类型

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



## 支持的数据类型

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

| #    | 数据类型 | 描述                                                         |
| ---- | -------- | ------------------------------------------------------------ |
| 1    | bigint   | 整数型                                                       |
| 2    | float    | 浮点型                                                       |
| 3    | string   | 文本值，由 Unicode 字符组成。                                |
| 4    | datetime | 日期时间类型-*目前尚不支持*。                                |
| 5    | boolean  | 布尔类型，值可以是`true` 或者 `false`。                      |
| 6    | array    | 数组类型可以是简单数据或结构类型中的任何类型（＃1-＃5和＃7）。 |
| 7    | struct   | 复杂类型。 名称/值对的集合。 值必须是受支持的数据类型。      |

## 比较和计算的兼容性

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

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

| bigint   | float | string | datetime            | boolean |
| -------- | ----- | ------ | ------------------- | ------- |
| bigint   | Y     | Y      | N                   | N       |
| float    | Y     | Y      | N                   | N       |
| string   | N     | N      | Y                   | N       |
| datetime | Y     | Y      | Y, 如为合法数据类型 | Y       |
| boolean  | N     | N      | N                   | N       |

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

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

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

## 类型转换

这些是控制*数据类型转换*的规则：

- ...
- 


