

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 資料類型
<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 attempts，以剖析符合規則表達式的字串：^-?\$1d\$1(\$1.\$1d\$1)?((?i)E-?\$1d\$1)?\$1。「0」、「-1.2」、「5E-12」均為自動轉換為 Decimal 的範例字串。 | 
| Array | Undefined. | 
| 物件 | Undefined. | 
| Null | Null. | 
| 未定義 | Undefined. | 


**To Int**  

| 引數類型 | 結果 | 
| --- | --- | 
| Int | 來源值。 | 
| Decimal | 四捨五入到最接近 Int 的來源值。 | 
| Boolean | Undefined。(您可以明確使用 Cast 函數轉換 true = 1.0、false = 0.0。) | 
| String |  SQL 引擎會嘗試將字串剖析為 Decimal. AWS IoT attempts，以剖析符合規則表達式的字串：^-?\$1d\$1(\$1.\$1d\$1)?((?i)E-?\$1d\$1)?\$1。"0"、"-1.2"、"5E-12" 是字串的所有範例，這些字串會自動轉換為 Decimals. AWS IoT attempts，以String將 轉換為 Decimal，然後截斷該字串的小數位Decimal數以製作 Int。 | 
| Array | 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。 | 
| Array | Undefined. | 
| 物件 | Undefined. | 
| Null | Undefined. | 
| 未定義 | Undefined. | 


**To String**  

| 引數類型 | 結果 | 
| --- | --- | 
| Int | 以標準表示法表示的 Int 的字串顯示方式。 | 
| Decimal | 代表 Decimal 值的字串，可能是採取科學表示法。 | 
| Boolean | 「true」或「false」。所有小寫。 | 
| String | 原始的值。 | 
| 陣列 | 序列化為 JSON 的 Array。該結果字串為以逗號分隔的清單，並包含在方括弧內。String 在括號中。Decimal、Int、Boolean 和 Null 則不是。 | 
| 物件 | 序列化為 JSON 的物件。該結果字串為以逗號分隔的鍵值組清單，並以大括號為開頭和結尾。String 在括號中。Decimal、Int、Boolean 和 Null 則不是。 | 
| Null | Undefined. | 
| 未定義 | 未定義。 | 