
# date_sub
date_sub函数按照days幅度递减start_date日期的天数。
如需要获取当前日期基础上指定变动幅度的日期，可结合[current_date](https://support.huaweicloud.com/sqlref-spark-aidatalake/aidatalake_063_0134.html)或[getdate](https://support.huaweicloud.com/sqlref-spark-aidatalake/aidatalake_063_0147.html)函数共同使用。
请注意date_sub函数与[date_add](https://support.huaweicloud.com/sqlref-spark-aidatalake/aidatalake_063_0136.html)函数逻辑相反。
#### 命令格式
```
date_sub(string startdate, int days)
```
#### 参数说明
表1参数说明 
| 参数         | 是否必选 | 参数类型                                                                                                                                                                                                            | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
|:---|:---|:---|:---|
| start_date | 是    | DATE 或 STRING | 代表起始日期。 支持以下格式： - yyyy-mm-dd  - yyyy-mm-dd hh:mi:ss  - yyyy-mm-dd hh:mi:ss.ff3                                                                                                                                              |
| days       | 是    | INT                                                                                                                                                                                                             | 代表需要减少的天数。 - 当days大于0时，从start_date中减少指定的天数。  - 当days小于0时，向start_date中增加指定的天数。  - 当days等于0时，即加0天，日期不变。  - 当days值为NULL时，返回NULL。   |
   
#### 返回值说明
返回DATE类型的日期值，格式为yyyy-mm-dd。
![](https://support.huaweicloud.com/sqlref-spark-aidatalake/public_sys-resources/note_3.0-zh-cn.png)
- start_date非DATE或STRING类型时，返回报错，错误信息：data type mismatch。
- start_date为DATE或STRING类型，但不符合日期值的入参格式时，返回NULL。
- start_date值为NULL时，返回NULL。
- days值为NULL时，返回NULL。
 
#### 示例代码
- 示例1
  ```
  select date_sub('2023-08-14 17:00:00', 2);
  ```
  返回2023-08-12。减2天。
  
- 示例2
  ```
  select date_sub(date'2023-08-14', -1);
  ```
  返回2023-08-15。增1天。
  
- 示例3
  ```
  select date_sub(getdate(),1);
  ```
  假设当前时间为2023-08-14 17:00:00，返回2023-08-13。
  
- 示例4
  ```
  select date_sub('2023-08-14 17:00:00', null);
  ```
  返回NULL。
  
 
