# Extraction Functions

This section contains extraction functions that extract `unit` from an input expression. The table below contains the supported units for the given extraction functions.

|   Unit  |                            Description                            |
| :-----: | :---------------------------------------------------------------: |
|   YEAR  |                           extracts year                           |
| QUARTER |                          extracts quarter                         |
|  MONTH  |                           extracts month                          |
|   WEEK  |                     extracts week of the year                     |
|   DAY   |                            extracts day                           |
|   DOY   |                    extract the day of the year                    |
|   DOW   | extract ISO day of the week (ranges from 1 (Monday) to 7 (Sunday) |
|   HOUR  |                           extracts hour                           |
|  MINUTE |                          extracts minute                          |
|  SECOND |                          extracts second                          |
|  EPOCH  |                        extracts epoch time                        |

#### <mark style="color:purple;">EXTRACT(</mark>  unit FROM \<datetime expr>  <mark style="color:purple;">)</mark>

Returns the value of specified `unit` from the given date-time expression.

```sql
> select extract(MINUTE FROM cast('2022-01-02 12:27:11' as timestamp))
27
```

#### <mark style="color:purple;">DATEPART(</mark>  unit,  \<expr>  <mark style="color:purple;">)</mark>

Returns the specified unit of the given date/timestamp expression.

```sql
> select current_date, datepart('day', current_date) as day_val;
----------------------------------------
| current_date        |day_val         |
----------------------------------------
| 2023-01-06 00:00:00 |6               |
----------------------------------------
```

#### <mark style="color:purple;">WEEK(</mark> \<date\_or\_timestamp\_expr> <mark style="color:purple;">)</mark>

Returns the week number of the year.

<pre class="language-sql"><code class="lang-sql"><strong>> select week(FROM_UNIXTIME_WITHUNIT(1673263327000, 'milliseconds'))
</strong><strong>2
</strong></code></pre>

#### <mark style="color:purple;">YEAR(</mark> \<date\_or\_timestamp\_expr> <mark style="color:purple;">)</mark>

Returns the year for a  date or timestamp.

```sql
> select week(FROM_UNIXTIME_WITHUNIT(1673263327000, 'milliseconds'))
2
```

#### <mark style="color:purple;">MONTH(</mark>  \<date\_or\_timestamp\_expr>  <mark style="color:purple;">)</mark>

Returns the month for a date or timestamp.

```sql
> select month(date('2002-11-14'));
11
```

#### <mark style="color:purple;">DAYS(</mark>  \<date\_or\_timestamp\_expr>  <mark style="color:purple;">)</mark>

Returns the day of the month for a date or timestamp.

```sql
> select days(to_timestamp('2023-04-18 10:30:00'));
18
```

```sql
> select days(to_date('2023-04-12'));
12
```

#### <mark style="color:purple;">LAST\_DAY(</mark>  \<date\_or\_timestamp\_expr>  <mark style="color:purple;">)</mark>

Return the last day of the month for a date or timestamp.

```sql
> select last_day(cast('2022-01-11' as date));
2022-01-31
```

#### <mark style="color:purple;">DAYNAME(</mark>  \<date\_or\_timestamp\_expr>  <mark style="color:purple;">)</mark>

Returns the three-letter day-of-week name for a date or timestamp.

<pre class="language-sql"><code class="lang-sql">> select dayname(cast('2024-03-09' as date))
<strong>Sat
</strong>> select dayname(cast('2024-03-11' as timestamp))
Mon
</code></pre>

#### <mark style="color:purple;">HOUR(</mark>  \<date\_or\_timestamp\_expr>  <mark style="color:purple;">)</mark>

Returns the hour of the day from timestamp. The value ranges from `0` to `23`.

```sql
> select hour(to_timestamp('2023-04-18 10:30:00'));
10
```

#### <mark style="color:purple;">MINUTE(</mark>  \<date\_or\_timestamp\_expr>  <mark style="color:purple;">)</mark>

Returns the minute of the hour from timestamp. The value ranges from `0` to `59`.

```sql
> select minute(to_timestamp('2023-04-18 10:30:00'));
30
```

#### <mark style="color:purple;">SECOND(</mark>  \<date\_or\_timestamp\_expr>  <mark style="color:purple;">)</mark>

Returns the second of the minute from timestamp. The value ranges from `0` to `59`.

```sql
> select second(to_timestamp('2023-04-18 10:30:45'));
45
```

#### <mark style="color:purple;">DAYOFWEEKISO(</mark>  \<date\_or\_timestamp\_expr>  <mark style="color:purple;">)</mark>

Day (number) of the week uses ISO semantics 1 to 7

```sql
> select DAYOFWEEKISO(tstamp) AS "DAYOFWEEKISO" from ( SELECT '2016-01-02T23:39:20.123-07:00'::TIMESTAMP AS tstamp)
6
```

#### <mark style="color:purple;">WEEKOFYEAR(</mark>  \<date\_or\_timestamp\_expr>  <mark style="color:purple;">)</mark>

Week (number) of the year 1 to 53.

```sql
> SELECT WEEKOFYEAR(tstamp) AS "WEEK OF YEAR" FROM (SELECT  '2016-01-02T23:39:20.123-07:00'::TIMESTAMP AS tstamp)
53
```

#### <mark style="color:purple;">WEEKISO(</mark>  \<date\_or\_timestamp\_expr>  <mark style="color:purple;">)</mark>

WEEKISO is the same as WEEKOFYEAR, except uses ISO semantics 1 to 53.

<pre class="language-sql"><code class="lang-sql"><strong>> SELECT WEEKISO(tstamp) AS "WEEK ISO" FROM (SELECT  '2016-01-02T23:39:20.123-07:00'::TIMESTAMP AS tstamp)
</strong>53
</code></pre>
