

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 数据类型
<a name="iot-sql-data-types"></a>

 AWS IoT 规则引擎支持所有 JSON 数据类型。


**支持的数据类型**  

| Type | 含义 | 
| --- | --- | 
| Int | 离散的 Int。最大 34 位。 | 
| Decimal |  精度为 34 位的 `Decimal`，最小非零数量级为 1E-999，最大数量级为 9.999…E999。  部分函数返回双精度 `Decimal` 值，而不是 34 位数字精度。 对于 SQL V2（2016-03-23），整数数字值，例如 `10.0`，将被处理为 `Int` 值 (`10`)，而不是预期的 `Decimal` 值 (`10.0`)。若要可靠地将整数数值处理为 `Decimal` 值，请使用 SQL V1（2015-10-08）作为规则查询语句。   | 
| Boolean | True 或 False。 | 
| String | UTF-8 字符串。 | 
| Array | 不必为相同类型的一系列值。 | 
| Object | 包含一个键和一个值的 JSON 值。键必须是字符串。值可以是任意类型。 | 
| Null | Null 由 JSON 定义。它是表示缺少某个值的实际值。您必须通过使用 SQL 语句中 Null 关键字明确创建一个 Null 值。例如："SELECT NULL AS n FROM 'topic/subtopic'"。 | 
| Undefined |  非值。在 JSON 中无法明确表示，只能忽略该值。例如，在对象 `{"foo": null}` 中，键“foo”返回 NULL，但键“bar”返回 `Undefined`。在内部，SQL 语言将 `Undefined` 作为值处理，但它在 JSON 中无法表示，因此，在序列化为 JSON 时，结果为 `Undefined`。 <pre> {"foo":null, "bar":undefined} </pre> 序列化为 JSON 如下： <pre> {"foo":null}</pre> 同样，`Undefined` 在被自身序列化时会转化为空字符串。使用无效参数（例如，错误的类型、错误的参数号等）调用的函数将返回 `Undefined`。  | 

## 转换
<a name="iot-sql-conversions"></a>

下表列出当一个类型的值转换为另一个类型时（为函数提供错误类型的值时）返回的结果。例如，如果绝对值函数“abs”（期待的值类型为 `Int` 或 `Decimal`）被赋予 `String` 时，它会尝试遵循以下规则将 `String` 转换为 `Decimal`。在这种情况下，“abs（“-5.123”）”将被视为“abs（-5.123）”。

**注意**  
不会尝试转换 `Array`、`Object`、`Null` 或 `Undefined`。


**To decimal**  

| 参数类型 | 结果 | 
| --- | --- | 
| Int | 没有小数点的 Decimal。 | 
| Decimal | 源值。 | 
| Boolean | Undefined。（您可以明确使用 cast 函数使 true = 1.0，false = 0.0。) | 
| String | SQL 引擎尝试将字符串解析为。Decimal AWS IoT 尝试解析与正则表达式匹配的字符串:^-?\$1d\$1(\$1.\$1d\$1)?((?i)E-?\$1d\$1)?\$1。可自动转换为 Decimal 的字符串示例包括“0”、“-1.2”、“5E-12”。 | 
| 数组 | Undefined. | 
| 对象 | Undefined. | 
| Null | Null. | 
| 未定义 | Undefined. | 


**To int**  

| 参数类型 | 结果 | 
| --- | --- | 
| Int | 源值。 | 
| Decimal | 源值都舍入到最接近的 Int。 | 
| Boolean | Undefined。（您可以明确使用 cast 函数使 true = 1.0，false = 0.0。) | 
| String |  SQL 引擎尝试将字符串解析为。Decimal AWS IoT 尝试解析与正则表达式匹配的字符串:^-?\$1d\$1(\$1.\$1d\$1)?((?i)E-?\$1d\$1)?\$1。“0”、“-1.2”、“5E-12” 都是自动转换为 Decimal s 的字符串的示例。 AWS IoT 尝试将其转换为 aDecimal，然后将其中的小数位截断String为一个。Decimal Int | 
| 数组 | Undefined. | 
| 对象 | Undefined. | 
| Null | Null. | 
| 未定义 | Undefined. | 


**To Boolean**  

| 参数类型 | 结果 | 
| --- | --- | 
| Int | Undefined。（您可以明确使用 cast 函数使 0 = False，any\$1nonzero\$1value = True。） | 
| Decimal | Undefined。（您可以明确使用 cast 函数使 0 = False，any\$1nonzero\$1value = True。） | 
| Boolean | 原始值。 | 
| String | “true” = True 和“false”= False（不区分大小写）。其它字符串值为 Undefined。 | 
| 数组 | Undefined. | 
| 对象 | Undefined. | 
| Null | Undefined. | 
| 未定义 | Undefined. | 


**To string**  

| 参数类型 | 结果 | 
| --- | --- | 
| Int | 标准表示法中 Int 的字符串表示形式。 | 
| Decimal | 科学表示法中 Decimal 值的字符串表示。 | 
| Boolean | “true”或“false”。均为小写。 | 
| String | 原始值。 | 
| 数组 | Array 序列化为 JSON。结果字符串为逗号分隔的列表，括在方括号中。String 带引号。Decimal、Int、Boolean 和 Null 不带引号。 | 
| 对象 | 序列化为 JSON 的对象。结果字符串为键值对的逗号分隔列表，以大括号开头和结束。String 带引号。Decimal、Int、Boolean 和 Null 不带引号。 | 
| Null | Undefined. | 
| 未定义 | Undefined。 | 