# 算术运算符

MatrixOne 支持基本的算术运算符，如向量间或向量和标量间的加法、减法、乘法和除法。这些运算符执行逐元素的算术操作，并返回一个新的向量。

:::{note}
减法（`-`）、乘法（`*`）和除法（`/`）都与加法示例类似，不作赘述。
:::
## Add

### **函数说明**

`+` 用于将两个元素相加。

### **函数语法**

```sql
SELECT para1 + para2
```

### **示例**

```text
drop table if exists vec_table;
create table vec_table(a int, b vecf32(3), c vecf64(3));
insert into vec_table values(1, "[1,2,3]", "[4,5,6]");
mysql> select * from vec_table;
+------+-----------+-----------+
| a    | b         | c         |
+------+-----------+-----------+
|    1 | [1, 2, 3] | [4, 5, 6] |
+------+-----------+-----------+
1 row in set (0.00 sec)

mysql> select b + "[1,2,3]" from vec_table;
+-------------+
| b + [1,2,3] |
+-------------+
| [2, 4, 6]   |
+-------------+
1 row in set (0.00 sec)

mysql> select b + 1 from vec_table;
+-----------+
| b + 1     |
+-----------+
| [2, 3, 4] |
+-----------+
1 row in set (0.01 sec)

mysql> select cast("[1,2,3]" as vecf32(3)) + 5.0;
+----------------------------------+
| cast([1,2,3] as vecf32(3)) + 5.0 |
+----------------------------------+
| [6, 7, 8]                        |
+----------------------------------+
1 row in set (0.00 sec)
```

### **限制**

- 两个向量类型参数相加时，向量的维度应相同。
- 如果两个向量类型参数相加，类型分别为 vecf32 和 vecf64，那么结果会转换为 vecf64。
- 当向量类型和标量类型数据相减时，向量类型数据需为被减数。

## Divide

### **函数说明**

`/` 用于将两个向量元素相除。

## **函数语法**

```sql
SELECT para1 / para2
```

### **示例**

```text
drop table if exists vec_table;
create table vec_table(a int, b vecf32(3), c vecf64(3));
insert into vec_table values(1, "[1,2,3]", "[4,5,6]");
mysql> select * from vec_table;
+------+-----------+-----------+
| a    | b         | c         |
+------+-----------+-----------+
|    1 | [1, 2, 3] | [4, 5, 6] |
+------+-----------+-----------+
1 row in set (0.00 sec)

mysql> select b/b from vec_table;
+-----------+
| b / b     |
+-----------+
| [1, 1, 1] |
+-----------+
1 row in set (0.00 sec)

mysql> select cast("[1,2,3]" as vecf32(3)) / b from vec_table;;
+--------------------------------+
| cast([1,2,3] as vecf32(3)) / b |
+--------------------------------+
| [1, 1, 1]                      |
+--------------------------------+
1 row in set (0.00 sec)

mysql> select b/2 from vec_table;
+---------------+
| b / 2         |
+---------------+
| [0.5, 1, 1.5] |
+---------------+
1 row in set (0.00 sec)
```

### **限制**

- 分母元素不允许为 0，否则产生报错。
- 两个参数都为向量类型时维度应相同。
- 如果两个向量类型参数相加，类型分别为 vecf32 和 vecf64，那么结果会转换为 vecf64。
- 当向量类型和标量类型数据相除时，向量类型数据需为被除数。
