

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

# EXTRACT
<a name="sql-reference-extract"></a>

```
EXTRACT(YEAR|MONTH|DAY|HOUR|MINUTE|SECOND FROM <datetime expression>|<interval expression>)
```

EXTRACT 函数从 DATE、TIME、TIMESTAMP 或 INTERVAL 表达式中提取一个字段。对于 SECOND 以外的所有字段，都返回 BIGINT。对于 SECOND，返回 DECIMAL(5,3)，包括毫秒。

## 语法
<a name="sql-reference-extract-syntax"></a>

### 示例
<a name="sql-reference-extract-examples"></a>


| 函数 | 结果 | 
| --- | --- | 
|  <pre>EXTRACT(DAY FROM INTERVAL '2 3:4:5.678' DAY TO SECOND)</pre>  |  2  | 
|  <pre>EXTRACT(HOUR FROM INTERVAL '2 3:4:5.678' DAY TO SECOND)</pre>  |  3  | 
|  <pre>EXTRACT(MINUTE FROM INTERVAL '2 3:4:5.678' DAY TO SECOND)</pre>  |  4  | 
|  <pre>EXTRACT(SECOND FROM INTERVAL '2 3:4:5.678' DAY TO SECOND)</pre>  |  5.678  | 
|  <pre>EXTRACT(MINUTE FROM CURRENT_ROW_TIMESTAMP)<br />where CURRENT_ROW_TIMESTAMP is 2016-09-23 04:29:26.234</pre>  |  29  | 
|  <pre>EXTRACT (HOUR FROM CURRENT_ROW_TIMESTAMP)</pre> 其中 CURRENT\$1ROW\$1TIMESTAMP 是 2016-09-23 04:29:26.234  |  4  | 

### 用在函数中
<a name="sql-ref-extract-use"></a>

EXTRACT 可用于条件数据，例如在下面的函数中，当为 [CURRENT\$1ROW\$1TIMESTAMP](sql-reference-current-row-timestamp.md) 输入 p\$1time 时，返回 30 分钟的下限。

```
CREATE or replace FUNCTION FLOOR30MIN( p_time TIMESTAMP )
RETURNS  TIMESTAMP
CONTAINS SQL
RETURNS NULL ON NULL INPUT
RETURN  floor(p_time to HOUR) + (( EXTRACT (  MINUTE FROM p_time  ) / 30)* INTERVAL '30' MINUTE ) ;
```

您可以使用下面的代码来实现此函数：

```
SELECT stream FLOOR30MIN( CURRENT_ROW_TIMESTAMP ) as ROWTIME , * from "MyStream" ) over (range current row ) as r
```

**注意**  
上面的代码假设你之前创建了一个名为 “” 的直播MyStream。