# 时间和日期操作符
![](https://support.huaweicloud.com/sqlreference-dws/public_sys-resources/note_3.0-zh-cn.png)
在使用时间和日期操作符时，对应的操作数请使用明确的类型前缀修饰，以确保数据库在解析操作数的时候能够与用户预期一致，不会产生非预期的结果。
如下示例，没有明确数据类型就会出现异常错误。
```
SELECT date '2001-10-01' - '7' AS RESULT;
```
表1时间和日期操作符 
| 操作符      | 用法示例                                                                                                                                                                                                                                                                   | 示例结果                                                                                                                                                                                                                                                                                                                                 |
|:---|:---|:---|
| +  | date + integer → timestamp 给日期加上天数。 ``` SELECT date '2001-09-28' + integer '7' AS RESULT; ```                                                                                                                                             | date类型参数与integer参数相加，获取时间间隔为7天后的时间： ``` 2001-10-05 00:00:00 ```                                                                                                                                                                                                                                                                       |
| +                             | date + interval → timestamp 为日期添加时间间隔。 ``` SELECT date '2001-09-28' + interval '1 hour' AS RESULT; ``` ``` SELECT date '2021-02-28' + interval '1 month' AS RESULT; ``` ``` SELECT date '2021-01-31' + interval '1 month' AS RESULT; ``` | date类型参数与interval参数相加。 获取时间间隔为1小时后的时间： ``` 2001-09-28 01:00:00 ``` date函数对于日期相加减超过月份的日期范围，会对齐到对应月份最后一天，不超过则不处理。 ``` 2021-03-28 00:00:00 ``` 获取时间间隔为1个月的时间： ``` 2021-02-28 00:00:00 ``` |
| +                              | date + time → timestamp 在日期中添加一天中的时间。 ``` SELECT date '2001-09-28' + time '03:00' AS RESULT; ```                                                                                                                                           | date类型参数与time类型参数相加，获取具体的日期和时间结果： ``` 2001-09-28 03:00:00 ```                                                                                                                                                                                                                                                                         |
| +                               | interval + interval → interval 添加时间间隔。 ``` SELECT interval '1 day' + interval '1 hour' AS RESULT; ```                                                                                                                                     | interval参数相加，获取两个时间间隔之和： ``` 1 day 01:00:00 ```                                                                                                                                                                                                                                                                                       |
| +                              | timestamp + interval → timestamp 在时间戳中添加一个时间间隔。 ``` SELECT timestamp '2001-09-28 01:00' + interval '23 hours' AS RESULT; ```                                                                                                               | timestamp时间类型参数与interval参数相加，获取间隔23小时后的时间： ``` 2001-09-29 00:00:00 ```                                                                                                                                                                                                                                                                |
| +                              | time + interval → time 为时间添加时间间隔。 ``` SELECT time '01:00' + interval '3 hours' AS RESULT; ```                                                                                                                                             | time类型参数与interval参数相加，获取间隔时间为3小时后的时间： ``` 04:00:00 ```                                                                                                                                                                                                                                                                                |
| -        | date - date → integer 减去日期，生成日期时间差。 ``` SELECT date '2001-10-01' - date '2001-09-28' AS RESULT; ```                                                                                                                                          | date类型参数相减，获取两个日期的时间差： ``` 3 days ```                                                                                                                                                                                                                                                                                                |
| -                            | date - integer → timestamp 从日期中减去天数。 ``` SELECT date '2001-10-01' - integer '7' AS RESULT; ```                                                                                                                                            | date类型参数与integer参数相减，获取两者的时间差： ``` 2001-09-24 00:00:00 ```                                                                                                                                                                                                                                                                           |
| -                          | date - interval → timestamp 从日期中减去时间间隔。 ``` SELECT date '2001-09-28' - interval '1 hour' AS RESULT; ```                                                                                                                                     | date类型参数与interval参数相减，获取两者的日期、时间差： ``` 2001-09-27 23:00:00 ```                                                                                                                                                                                                                                                                      |
| -                           | time - time → interval 减去时间。 ``` SELECT time '05:00' - time '03:00' AS RESULT; ```                                                                                                                                                          | time类型参数相减，获取两参数的时间差： ``` 02:00:00 ```                                                                                                                                                                                                                                                                                              |
| -                          | time - interval → time 从时间中减去时间间隔。 ``` SELECT time '05:00' - interval '2 hours' AS RESULT; ```                                                                                                                                              | time类型参数与interval相减，获取两参数的时间差： ``` 03:00:00 ```                                                                                                                                                                                                                                                                                       |
| -                          | timestamp - interval → timestamp 从时间戳中减去时间间隔。 ``` SELECT timestamp '2001-09-28 23:00' - interval '23 hours' AS RESULT; ```                                                                                                                 | timestamp类型参数与interval相减，获取两者的日期时间差： ``` 2001-09-28 00:00:00 ```                                                                                                                                                                                                                                                                       |
| -                           | interval - interval → interval 减去时间间隔。 ``` SELECT interval '1 day' - interval '1 hour' AS RESULT; ```                                                                                                                                       | interval参数相减，获取两者的时间差： ``` 23:00:00 ```                                                                                                                                                                                                                                                                                               |
| -                           | timestamp - timestamp → interval 减去时间戳。 ``` SELECT timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00' AS RESULT; ```                                                                                                              | timestamp类型参数相减，获取两者的日期时间差： ``` 1 day 15:00:00 ```                                                                                                                                                                                                                                                                                  |
| -                            | select now() - interval → timestamp with time zone 获取当前日期的前一天： ``` select now() - interval '1 day' AS RESULT; ```                                                                                                                          | 获取当前日期的前一天： ``` 2025-07-29 10:54:29.116501+08 ```                                                                                                                                                                                                                                                                                    |
| \*       | interval \* double precision → interval 将时间间隔乘以数量： ``` SELECT 900 * interval '1 second' AS RESULT; ``` ``` SELECT 21 * interval '1 day' AS RESULT; ``` ``` SELECT double precision '3.5' * interval '1 hour' AS RESULT; ```                | 间隔1秒乘以900。 ``` 00:15:00 ``` 间隔1天乘以21天。 ``` 21 days ``` 间隔1小时乘以3.5。 ``` 03:30:00 ```                                                                                                                                                                                                   |
| /        | interval / double precision → interval ``` SELECT interval '1 hour' / double precision '1.5' AS RESULT; ```                                                                                                                                                                               | 用时间间隔除以数量，获取一段时间中的某一段： ``` 00:40:00 ```                                                                                                                                                                                                                                                                                               |
   
