

# SQL 함수
<a name="s3-select-sql-reference-sql-functions"></a>

**중요**  
신규 고객은 더 이상 Amazon S3 Select를 사용할 수 없습니다. Amazon S3 Select 기존 고객은 평소처럼 이 기능을 계속 사용할 수 있습니다. [자세히 알아보기](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Amazon S3 Select는 다음 SQL 함수를 지원합니다.

**Topics**
+ [집계 함수](s3-select-sql-reference-aggregate.md)
+ [조건 함수](s3-select-sql-reference-conditional.md)
+ [변환 함수](s3-select-sql-reference-conversion.md)
+ [날짜 함수](s3-select-sql-reference-date.md)
+ [문자열 함수](s3-select-sql-reference-string.md)

# 집계 함수
<a name="s3-select-sql-reference-aggregate"></a>

**중요**  
신규 고객은 더 이상 Amazon S3 Select를 사용할 수 없습니다. Amazon S3 Select 기존 고객은 평소처럼 이 기능을 계속 사용할 수 있습니다. [자세히 알아보기](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Amazon S3 Select는 다음과 같은 집계 함수를 지원합니다.


| 함수 | 인수 유형 | 반환 타입 | 
| --- | --- | --- | 
| `AVG(expression)` | `INT`, `FLOAT`, `DECIMAL` | `INT` 인수의 경우 `DECIMAL`, 부동 소수점 인수의 경우 `FLOAT`, 그 밖의 경우에는 인수 데이터 형식과 동일합니다. | 
| `COUNT` |  `-`  | `INT` | 
| `MAX(expression)` | `INT`, `DECIMAL` | 인수 형식과 동일합니다. | 
| `MIN(expression)` | `INT`, `DECIMAL` | 인수 형식과 동일합니다. | 
| `SUM(expression)` | `INT`, `FLOAT`, `DOUBLE`, `DECIMAL` | `INT` 인수의 경우 `INT`, 부동 소수점 인수의 경우 `FLOAT`, 그 밖의 경우에는 인수 데이터 형식과 동일합니다. | 

## SUM 예제
<a name="s3-select-sql-reference-aggregate-case-examples"></a>

[S3 Inventory 보고서](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-inventory.html)에서 폴더의 총 객체 크기를 집계하려면 `SUM` 표현식을 사용하세요.

다음 S3 Inventory 보고서는 GZIP으로 압축된 CSV 파일입니다. 세 개의 열이 있습니다.
+ 첫 번째 열은 S3 Inventory 보고서의 대상인 S3 버킷(*`DOC-EXAMPLE-BUCKET`*)의 이름입니다.
+ 두 번째 열은 버킷의 객체를 고유하게 식별하는 객체 키 이름입니다.

  첫 번째 행의 `example-folder/` 값은 `example-folder` 폴더에 대한 값입니다. Amazon S3에서 버킷에 폴더를 만들면 S3는 제공한 폴더 이름으로 설정된 키가 있는 0바이트의 객체를 생성합니다.

  두 번째 행의 `example-folder/object1` 값은 `example-folder` 폴더에 있는 `object1` 객체에 대한 값입니다.

  세 번째 행의 `example-folder/object2` 값은 `example-folder` 폴더에 있는 `object2` 객체에 대한 값입니다.

  폴더에 대한 자세한 내용은 [Amazon S3 콘솔에서 폴더를 사용하여 객체 구성](using-folders.md)을 참조하세요.
+ 세 번째 열은 객체 크기(바이트)입니다.

```
"DOC-EXAMPLE-BUCKET","example-folder/","0"
"DOC-EXAMPLE-BUCKET","example-folder/object1","2011267"
"DOC-EXAMPLE-BUCKET","example-folder/object2","1570024"
```

`SUM` 표현식을 사용하여 `example-folder` 폴더의 전체 크기를 계산하려면 Amazon S3 Select에서 SQL 쿼리를 실행합니다.

```
SELECT SUM(CAST(_3 as INT)) FROM s3object s WHERE _2 LIKE 'example-folder/%' AND _2 != 'example-folder/';
```

쿼리 결과: 

```
3581291
```

# 조건 함수
<a name="s3-select-sql-reference-conditional"></a>

**중요**  
신규 고객은 더 이상 Amazon S3 Select를 사용할 수 없습니다. Amazon S3 Select 기존 고객은 평소처럼 이 기능을 계속 사용할 수 있습니다. [자세히 알아보기](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Amazon S3 Select에서는 다음과 같은 조건부 함수를 지원합니다.

**Topics**
+ [CASE](#s3-select-sql-reference-case)
+ [COALESCE](#s3-select-sql-reference-coalesce)
+ [NULLIF](#s3-select-sql-reference-nullif)

## CASE
<a name="s3-select-sql-reference-case"></a>

`CASE` 표현식은 다른 언어에서 볼 수 있는 `if/then/else` 문과 유사한 조건부 표현식입니다. `CASE`는 여러 조건이 있을 때 결과를 지정하는 데 사용됩니다. `CASE` 표현식은 단순(simple)과 검색(searched), 두 가지 유형이 있습니다.

단순 `CASE` 표현식에서는 표현식과 값을 비교합니다. 이때 일치하는 부분이 발견되면 `THEN` 절에서 지정된 작업이 적용됩니다. 일치하는 부분이 발견되지 않으면 `ELSE` 절에서 지정된 작업이 적용됩니다.

검색 `CASE` 표현식에서는 각 `CASE`가 부울 표현식에 따라 평가되고, `CASE` 문이 처음 일치하는 `CASE`를 반환합니다. `WHEN` 절 사이에서 일치하는 `CASE`이 발견되지 않으면 `ELSE` 절의 작업이 반환됩니다.

### 구문
<a name="s3-select-sql-reference-case-syntax"></a>

**참고**  
현재 Amazon S3 Select는 `ORDER BY` 또는 새 줄이 포함된 쿼리를 지원하지 않습니다. 줄 바꿈 없이 쿼리를 사용해야 합니다.

다음은 조건을 일치시키는 데 사용되는 단순 `CASE` 문입니다.

```
CASE expression WHEN value THEN result [WHEN...] [ELSE result] END					
```

다음은 각 조건을 평가하는 데 사용되는 검색 `CASE` 문입니다.

```
CASE WHEN boolean condition THEN result [WHEN ...] [ELSE result] END					
```

### 예제
<a name="s3-select-sql-reference-case-examples"></a>

**참고**  
Amazon S3 콘솔을 사용하여 다음 예제를 실행하고 CSV 파일에 헤더 행이 포함된 경우**CSV 데이터의 첫 번째 줄 제외**를 선택하세요.

**예제 1:** 쿼리에서 단순 `CASE` 표현식을 사용하여 `New York City`를 `Big Apple`로 바꿉니다. 그 밖의 도시 이름은 모두 `other`로 변경합니다.

```
SELECT venuecity, CASE venuecity WHEN 'New York City' THEN 'Big Apple' ELSE 'other' END FROM S3Object;
```

쿼리 결과: 

```
venuecity        |   case
-----------------+-----------
Los Angeles      | other
New York City    | Big Apple
San Francisco    | other
Baltimore        | other
...
```

**예제 2:** 검색 `CASE` 표현식을 사용하여 개별 티켓 판매에 대한 `pricepaid` 값을 기준으로 그룹 번호를 할당합니다.

```
SELECT pricepaid, CASE WHEN CAST(pricepaid as FLOAT) < 10000 THEN 'group 1' WHEN CAST(pricepaid as FLOAT) > 10000 THEN 'group 2' ELSE 'group 3' END FROM S3Object;					
```

쿼리 결과: 

```
pricepaid |  case
-----------+---------
12624.00 | group 2
10000.00 | group 3
10000.00 | group 3
9996.00 | group 1
9988.00 | group 1
...
```

## COALESCE
<a name="s3-select-sql-reference-coalesce"></a>

`COALESCE`는 인수를 순서대로 평가하여 알 수 없는 첫 번째 값, 즉 첫 번째 null이 아니거나 누락되지 않은 값을 반환합니다. 이 함수는 null과 누락 값을 전파하지 않습니다.

### 구문
<a name="s3-select-sql-reference-coalesce-syntax"></a>

```
COALESCE ( expression, expression, ... )
```

### 파라미터
<a name="s3-select-sql-reference-coalesce-parameters"></a>

 *`expression`*   
함수가 실행되는 대상 표현식입니다.

### 예제
<a name="s3-select-sql-reference-coalesce-examples"></a>

```
COALESCE(1)                -- 1
COALESCE(null)             -- null
COALESCE(null, null)       -- null
COALESCE(missing)          -- null
COALESCE(missing, missing) -- null
COALESCE(1, null)          -- 1
COALESCE(null, null, 1)    -- 1
COALESCE(null, 'string')   -- 'string'
COALESCE(missing, 1)       -- 1
```

## NULLIF
<a name="s3-select-sql-reference-nullif"></a>

두 개의 표현식이 주어질 경우 그 두 표현식이 같은 값으로 평가된다면 `NULLIF`는 `NULL`을 반환하고, 그렇지 않다면 `NULLIF`는 첫 번째 표현식을 평가한 결과를 반환합니다.

### 구문
<a name="s3-select-sql-reference-nullif-syntax"></a>

```
NULLIF ( expression1, expression2 )
```

### 파라미터
<a name="s3-select-sql-reference-nullif-parameters"></a>

 `expression1, expression2`   
함수가 실행되는 대상 표현식들입니다.

### 예제
<a name="s3-select-sql-reference-nullif-examples"></a>

```
NULLIF(1, 1)             -- null
NULLIF(1, 2)             -- 1
NULLIF(1.0, 1)           -- null
NULLIF(1, '1')           -- 1
NULLIF([1], [1])         -- null
NULLIF(1, NULL)          -- 1
NULLIF(NULL, 1)          -- null
NULLIF(null, null)       -- null
NULLIF(missing, null)    -- null
NULLIF(missing, missing) -- null
```

# 변환 함수
<a name="s3-select-sql-reference-conversion"></a>

**중요**  
신규 고객은 더 이상 Amazon S3 Select를 사용할 수 없습니다. Amazon S3 Select 기존 고객은 평소처럼 이 기능을 계속 사용할 수 있습니다. [자세히 알아보기](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Amazon S3 Select에서는 다음과 같은 변환 함수를 지원합니다.

**Topics**
+ [CAST](#s3-select-sql-reference-cast)

## CAST
<a name="s3-select-sql-reference-cast"></a>

`CAST` 함수는 단일 값으로 평가되는 표현식 같은 엔터티의 형식을 다른 형식으로 변환합니다.

### 구문
<a name="s3-select-sql-reference-cast-syntax"></a>

```
CAST ( expression AS data_type )
```

### 파라미터
<a name="s3-select-sql-reference-cast-parameters"></a>

 *`expression`*   
하나 이상의 값, 연산자 및 값으로 평가되는 SQL 함수의 조합입니다.

 *`data_type`*   
`INT`와 같이 표현식을 캐스팅할 대상 데이터 형식입니다. 지원되는 데이터 형식의 목록은 [데이터 타입](s3-select-sql-reference-data-types.md) 단원을 참조하십시오.

### 예제
<a name="s3-select-sql-reference-cast-examples"></a>

```
CAST('2007-04-05T14:30Z' AS TIMESTAMP)
CAST(0.456 AS FLOAT)
```

# 날짜 함수
<a name="s3-select-sql-reference-date"></a>

**중요**  
신규 고객은 더 이상 Amazon S3 Select를 사용할 수 없습니다. Amazon S3 Select 기존 고객은 평소처럼 이 기능을 계속 사용할 수 있습니다. [자세히 알아보기](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Amazon S3 Select는 다음과 같은 날짜 함수를 지원합니다.

**Topics**
+ [DATE\$1ADD](#s3-select-sql-reference-date-add)
+ [DATE\$1DIFF](#s3-select-sql-reference-date-diff)
+ [EXTRACT](#s3-select-sql-reference-extract)
+ [TO\$1STRING](#s3-select-sql-reference-to-string)
+ [TO\$1TIMESTAMP](#s3-select-sql-reference-to-timestamp)
+ [UTCNOW](#s3-select-sql-reference-utcnow)

## DATE\$1ADD
<a name="s3-select-sql-reference-date-add"></a>

날짜 부분, 양, 그리고 타임스탬프가 주어질 경우 `DATE_ADD`는 그 날짜 부분을 그 수량으로 변환하여 업데이트된 타임스탬프를 반환합니다.

### 구문
<a name="s3-select-sql-reference-date-add-syntax"></a>

```
DATE_ADD( date_part, quantity, timestamp )
```

### 파라미터
<a name="s3-select-sql-reference-date-add-parameters"></a>

*`date_part`*   
날짜의 어느 부분을 수정할지 지정합니다. 이것은 다음 중 하나가 될 수 있습니다.  
+ 년
+ 개월
+ day
+ 시간
+ minute
+ 초

 *`quantity`*   
업데이트된 타임스탬프에 적용되는 값입니다. 이 `quantity`가 양의 값이면 타임스탬프의 날짜 부분이 증가하고 음의 값이면 감소합니다.

 *`timestamp`*   
함수가 실행되는 대상 타임스탬프입니다.

### 예제
<a name="s3-select-sql-reference-date-add-examples"></a>

```
DATE_ADD(year, 5, `2010-01-01T`)                -- 2015-01-01 (equivalent to 2015-01-01T)
DATE_ADD(month, 1, `2010T`)                     -- 2010-02T (result will add precision as necessary)
DATE_ADD(month, 13, `2010T`)                    -- 2011-02T
DATE_ADD(day, -1, `2017-01-10T`)                -- 2017-01-09 (equivalent to 2017-01-09T)
DATE_ADD(hour, 1, `2017T`)                      -- 2017-01-01T01:00-00:00
DATE_ADD(hour, 1, `2017-01-02T03:04Z`)          -- 2017-01-02T04:04Z
DATE_ADD(minute, 1, `2017-01-02T03:04:05.006Z`) -- 2017-01-02T03:05:05.006Z
DATE_ADD(second, 1, `2017-01-02T03:04:05.006Z`) -- 2017-01-02T03:04:06.006Z
```

## DATE\$1DIFF
<a name="s3-select-sql-reference-date-diff"></a>

날짜 부분 1개와 유효한 타임스탬프 2개가 주어질 경우, `DATE_DIFF`는 날짜 부분들의 차이점을 반환합니다. `date_part`의 `timestamp1` 값이 `date_part`의 `timestamp2` 값보다 더 클 경우 반환 값은 음의 정수입니다. `date_part`의 `timestamp1` 값이 `date_part`의 `timestamp2` 값보다 더 작을 경우 반환 값은 양의 정수입니다.

### 구문
<a name="s3-select-sql-reference-date-diff-syntax"></a>

```
DATE_DIFF( date_part, timestamp1, timestamp2 )
```

### 파라미터
<a name="s3-select-sql-reference-date-diff-parameters"></a>

 **`date_part`**   
타임스탬프들의 어느 부분을 비교할지 지정합니다. `date_part`의 정의에 대해서는 [DATE\$1ADD](#s3-select-sql-reference-date-add) 단원을 참조하십시오.

 **`timestamp1`**   
비교할 첫 번째 타임스탬프입니다.

 **`timestamp2`**   
비교할 두 번째 타임스탬프입니다.

### 예제
<a name="s3-select-sql-reference-date-diff-examples"></a>

```
DATE_DIFF(year, `2010-01-01T`, `2011-01-01T`)            -- 1
DATE_DIFF(year, `2010T`, `2010-05T`)                     -- 4 (2010T is equivalent to 2010-01-01T00:00:00.000Z)
DATE_DIFF(month, `2010T`, `2011T`)                       -- 12
DATE_DIFF(month, `2011T`, `2010T`)                       -- -12
DATE_DIFF(day, `2010-01-01T23:00`, `2010-01-02T01:00`) -- 0 (need to be at least 24h apart to be 1 day apart)
```

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

날짜 부분 1개와 타임스탬프 1개가 주어질 경우, `EXTRACT`는 타임스탬프의 날짜 부분 값을 반환합니다.

### 구문
<a name="s3-select-sql-reference-extract-syntax"></a>

```
EXTRACT( date_part FROM timestamp )
```

### 파라미터
<a name="s3-select-sql-reference-extract-parameters"></a>

 **`date_part`**   
타임스탬프들의 어느 부분을 추출할지 지정합니다. 이것은 다음 중 하나가 될 수 있습니다.  
+ `YEAR`
+ `MONTH`
+ `DAY`
+ `HOUR`
+ `MINUTE`
+ `SECOND`
+ `TIMEZONE_HOUR`
+ `TIMEZONE_MINUTE`

 **`timestamp`**   
함수가 실행되는 대상 타임스탬프입니다.

### 예제
<a name="s3-select-sql-reference-extract-examples"></a>

```
EXTRACT(YEAR FROM `2010-01-01T`)                           -- 2010
EXTRACT(MONTH FROM `2010T`)                                -- 1 (equivalent to 2010-01-01T00:00:00.000Z)
EXTRACT(MONTH FROM `2010-10T`)                             -- 10
EXTRACT(HOUR FROM `2017-01-02T03:04:05+07:08`)             -- 3
EXTRACT(MINUTE FROM `2017-01-02T03:04:05+07:08`)           -- 4
EXTRACT(TIMEZONE_HOUR FROM `2017-01-02T03:04:05+07:08`)    -- 7
EXTRACT(TIMEZONE_MINUTE FROM `2017-01-02T03:04:05+07:08`)  -- 8
```

## TO\$1STRING
<a name="s3-select-sql-reference-to-string"></a>

타임스탬프와 형식 패턴이 주어질 경우, `TO_STRING`은 타임스탬프의 문자열 표현을 그 형식으로 반환합니다.

### 구문
<a name="s3-select-sql-reference-size-syntax"></a>

```
TO_STRING ( timestamp time_format_pattern )
```

### 파라미터
<a name="s3-select-sql-reference-size-parameters"></a>

 *`timestamp`*   
함수가 실행되는 대상 타임스탬프입니다.

 *`time_format_pattern`*   
문자에 대해 다음과 같이 특수하게 해석하는 문자열입니다.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/s3-select-sql-reference-date.html)

### 예제
<a name="s3-select-sql-reference-size-examples"></a>

```
TO_STRING(`1969-07-20T20:18Z`,  'MMMM d, y')                    -- "July 20, 1969"
TO_STRING(`1969-07-20T20:18Z`, 'MMM d, yyyy')                   -- "Jul 20, 1969"
TO_STRING(`1969-07-20T20:18Z`, 'M-d-yy')                        -- "7-20-69"
TO_STRING(`1969-07-20T20:18Z`, 'MM-d-y')                        -- "07-20-1969"
TO_STRING(`1969-07-20T20:18Z`, 'MMMM d, y h:m a')               -- "July 20, 1969 8:18 PM"
TO_STRING(`1969-07-20T20:18Z`, 'y-MM-dd''T''H:m:ssX')           -- "1969-07-20T20:18:00Z"
TO_STRING(`1969-07-20T20:18+08:00Z`, 'y-MM-dd''T''H:m:ssX')     -- "1969-07-20T20:18:00Z"
TO_STRING(`1969-07-20T20:18+08:00`, 'y-MM-dd''T''H:m:ssXXXX')   -- "1969-07-20T20:18:00+0800"
TO_STRING(`1969-07-20T20:18+08:00`, 'y-MM-dd''T''H:m:ssXXXXX')  -- "1969-07-20T20:18:00+08:00"
```

## TO\$1TIMESTAMP
<a name="s3-select-sql-reference-to-timestamp"></a>

문자열이 주어질 경우 `TO_TIMESTAMP`는 문자열을 타임스탬프로 변환합니다. `TO_TIMESTAMP`는 `TO_STRING`의 역연산입니다.

### 구문
<a name="s3-select-sql-reference-to-timestamp-syntax"></a>

```
TO_TIMESTAMP ( string )
```

### 파라미터
<a name="s3-select-sql-reference-to-timestamp-parameters"></a>

 *`string`*   
함수가 실행되는 대상 문자열입니다.

### 예제
<a name="s3-select-sql-reference-to-timestamp-examples"></a>

```
TO_TIMESTAMP('2007T')                         -- `2007T`
TO_TIMESTAMP('2007-02-23T12:14:33.079-08:00') -- `2007-02-23T12:14:33.079-08:00`
```

## UTCNOW
<a name="s3-select-sql-reference-utcnow"></a>

`UTCNOW`는 현재 시간(UTC)을 타임스탬프로 반환합니다.

### 구문
<a name="s3-select-sql-reference-utcnow-syntax"></a>

```
UTCNOW()
```

### 파라미터
<a name="s3-select-sql-reference-utcnow-parameters"></a>

`UTCNOW`는 파라미터를 사용하지 않습니다.

### 예제
<a name="s3-select-sql-reference-utcnow-examples"></a>

```
UTCNOW() -- 2017-10-13T16:02:11.123Z
```

# 문자열 함수
<a name="s3-select-sql-reference-string"></a>

**중요**  
신규 고객은 더 이상 Amazon S3 Select를 사용할 수 없습니다. Amazon S3 Select 기존 고객은 평소처럼 이 기능을 계속 사용할 수 있습니다. [자세히 알아보기](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Amazon S3 Select는 다음과 같은 문자열 함수를 지원합니다.

**Topics**
+ [CHAR\$1LENGTH, CHARACTER\$1LENGTH](#s3-select-sql-reference-char-length)
+ [LOWER](#s3-select-sql-reference-lower)
+ [SUBSTRING](#s3-select-sql-reference-substring)
+ [TRIM](#s3-select-sql-reference-trim)
+ [UPPER](#s3-select-sql-reference-upper)

## CHAR\$1LENGTH, CHARACTER\$1LENGTH
<a name="s3-select-sql-reference-char-length"></a>

`CHAR_LENGTH`(또는 `CHARACTER_LENGTH`)는 지정된 문자열의 문자 수를 계수합니다.

**참고**  
`CHAR_LENGTH`와 `CHARACTER_LENGTH`는 동의어입니다.

### 구문
<a name="s3-select-sql-reference-char-length-syntax"></a>

```
CHAR_LENGTH ( string )
```

### 파라미터
<a name="s3-select-sql-reference-char-length-parameters"></a>

 *`string`*   
함수가 실행되는 대상 문자열입니다.

### 예제
<a name="s3-select-sql-reference-char-length-examples"></a>

```
CHAR_LENGTH('')          -- 0
CHAR_LENGTH('abcdefg')   -- 7
```

## LOWER
<a name="s3-select-sql-reference-lower"></a>

문자열이 주어지면 `LOWER`는 모든 대문자를 소문자로 변환합니다. 대문자로 변환되지 않는 문자는 변경되지 않고 그대로 유지됩니다.

### 구문
<a name="s3-select-sql-reference-lower-syntax"></a>

```
LOWER ( string )
```

### 파라미터
<a name="s3-select-sql-reference-lower-parameters"></a>

 **`string`**   
함수가 실행되는 대상 문자열입니다.

### 예제
<a name="s3-select-sql-reference-lower-examples"></a>

```
LOWER('AbCdEfG!@#$') -- 'abcdefg!@#$'
```

## SUBSTRING
<a name="s3-select-sql-reference-substring"></a>

문자열, 시작 인덱스, 그리고 때로는 길이가 주어질 경우 `SUBSTRING`은 시작 인덱스부터 그 문자열의 마지막까지, 또는 제공된 길이까지 하위 문자열을 반환합니다.

**참고**  
입력 문자열의 첫 번째 문자가 인덱스 위치가 1입니다.  
 `start`가 < 1 이고 길이가 지정되지 않았으면 인덱스 위치가 1로 설정됩니다.
 `start`가 < 1 이고 길이가 지정되지 않았으면 인덱스 위치가 `start + length -1`로 설정됩니다.
 `start + length -1`이 < 0이면 빈 문자열이 반환됩니다.
 `start + length -1`이 > = 0이면 길이가 `start + length - 1`이고 인덱스 위치가 1로 시작하는 하위 문자열이 반환됩니다.

### 구문
<a name="s3-select-sql-reference-substring-syntax"></a>

```
SUBSTRING( string FROM start [ FOR length ] )
```

### 파라미터
<a name="s3-select-sql-reference-substring-parameters"></a>

 **`string`**   
함수가 실행되는 대상 문자열입니다.

 **`start`**   
문자열의 시작 위치입니다.

 **`length`**   
반환할 하위 문자열의 길이입니다. 존재하지 않는 경우, 문자열의 끝으로 넘어갑니다.

### 예제
<a name="s3-select-sql-reference-substring-examples"></a>

```
SUBSTRING("123456789", 0)      -- "123456789"
SUBSTRING("123456789", 1)      -- "123456789"
SUBSTRING("123456789", 2)      -- "23456789"
SUBSTRING("123456789", -4)     -- "123456789"
SUBSTRING("123456789", 0, 999) -- "123456789" 
SUBSTRING("123456789", 1, 5)   -- "12345"
```

## TRIM
<a name="s3-select-sql-reference-trim"></a>

문자열에서 앞에 오거나 뒤에 오는 문자들을 잘라냅니다. 제거할 기본 문자는 공백입니다(`' '`).

### 구문
<a name="s3-select-sql-reference-trim-syntax"></a>

```
TRIM ( [[LEADING | TRAILING | BOTH remove_chars] FROM] string )
```

### 파라미터
<a name="s3-select-sql-reference-trim-parameters"></a>

 **`string`**   
함수가 실행되는 대상 문자열입니다.

 `LEADING` \$1 `TRAILING` \$1 `BOTH`   
이 파라미터는 선행 또는 후행 문자를 다듬을지, 아니면 선행 및 후행 문자를 모두 다듬을지를 나타냅니다.

 **`remove_chars`**   
제거할 문자들의 집합입니다. `remove_chars`은 길이가 > 1인 문자열이 될 수 있습니다. 이 함수는 제거된 문자열의 시작 또는 끝에 `remove_chars`의 문자가 포함된 문자열을 반환합니다.

### 예제
<a name="s3-select-sql-reference-trim-examples"></a>

```
TRIM('       foobar         ')               -- 'foobar'
TRIM('      \tfoobar\t         ')            -- '\tfoobar\t'
TRIM(LEADING FROM '       foobar         ')  -- 'foobar         '
TRIM(TRAILING FROM '       foobar         ') -- '       foobar'
TRIM(BOTH FROM '       foobar         ')     -- 'foobar'
TRIM(BOTH '12' FROM '1112211foobar22211122') -- 'foobar'
```

## UPPER
<a name="s3-select-sql-reference-upper"></a>

문자열이 주어지면 `UPPER`는 모든 소문자를 대문자로 변환합니다. 소문자로 변환되지 않는 문자는 변경되지 않고 그대로 유지됩니다.

### 구문
<a name="s3-select-sql-reference-upper-syntax"></a>

```
UPPER ( string )
```

### 파라미터
<a name="s3-select-sql-reference-upper-parameters"></a>

 **`string`**   
함수가 실행되는 대상 문자열입니다.

### 예제
<a name="s3-select-sql-reference-upper-examples"></a>

```
UPPER('AbCdEfG!@#$') -- 'ABCDEFG!@#$'
```