

# Amazon S3 Select에 대한 SQL 참조
<a name="s3-select-sql-reference"></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**
+ [SELECT 명령](s3-select-sql-reference-select.md)
+ [데이터 타입](s3-select-sql-reference-data-types.md)
+ [연산자](s3-select-sql-reference-operators.md)
+ [예약어](s3-select-sql-reference-keyword-list.md)
+ [SQL 함수](s3-select-sql-reference-sql-functions.md)

# SELECT 명령
<a name="s3-select-sql-reference-select"></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는 `SELECT` SQL 명령만 지원합니다. `SELECT`에서 지원되는 ANSI 표준 절은 다음과 같습니다.


+ `SELECT` 계정의
+ `FROM` 절 
+ `WHERE` 절
+ `LIMIT` 절

**참고**  
Amazon S3 Select 쿼리는 현재 하위 쿼리 또는 조인을 지원하지 않습니다.

## SELECT 계정의
<a name="s3-select-sql-reference-select-list"></a>

`SELECT` 목록은 쿼리에서 반환하려는 열, 함수 및 표현식의 이름을 지정합니다. 목록은 쿼리의 출력을 나타냅니다.

```
SELECT *
SELECT projection1 AS column_alias_1, projection2 AS column_alias_2
```

`*`(별표)가 있는 `SELECT`의 첫 번째 형식은 `WHERE` 절을 통과한 모든 행을 있는 그대로 반환합니다. `SELECT`의 두 번째 형식은 각 열에 대해 사용자 정의 출력 스칼라 표현식 **`projection1`** 및 **`projection2`**를 사용하여 행을 생성합니다.

## FROM 절
<a name="s3-select-sql-reference-from"></a>

Amazon S3 Select에서는 다음과 같은 형식의 `FROM` 절을 지원합니다.

```
FROM table_name
FROM table_name alias
FROM table_name AS alias
```

`FROM` 절의 각 형식에서 `table_name`은 쿼리되는 `S3Object`입니다.  기존의 관계형 데이터베이스를 사용해오던 사용자의 경우, 이것을 단일 테이블에 대해 다수의 보기를 포함하는 데이터베이스 스키마로 생각할 수 있습니다.

표준 SQL에 따라 `FROM` 절은 `WHERE` 절에서 필터링되고 `SELECT` 목록에서 예상되는 행을 생성합니다.

Amazon S3 Select에 저장된 JSON 객체의 경우 다음과 같은 형식의 `FROM` 절을 사용할 수도 있습니다.

```
FROM S3Object[*].path
FROM S3Object[*].path alias
FROM S3Object[*].path AS alias
```

이 양식의 `FROM` 절을 사용하면 JSON 객체 내에서 배열 또는 객체를 선택할 수 있습니다. 다음 양식 중 하나를 사용하여 `path`를 지정할 수 있습니다.
+ 이름별(객체 내): `.name` 또는 `['name']`
+ 인덱스로(배열 내): `[index]`
+ 와일드카드 문자(객체 내): `.*`
+ 와일드카드 문자(배열 내): `[*]`

**참고**  
이 양식의 `FROM` 절은 JSON 객체에만 사용할 수 있습니다.
와일드카드 문자는 항상 하나 이상의 레코드를 출력합니다. 일치하는 레코드가 없을 경우 Amazon S3 Select가 `MISSING` 값을 출력합니다. 출력 직렬화 도중(쿼리 실행이 완료된 후) Amazon S3 Select는 `MISSING` 값을 빈 레코드로 대체합니다.
집계 함수(`AVG`, `COUNT`, `MAX`, `MIN` 및 `SUM`)는 `MISSING` 값을 건너뜁니다.
와일드카드 문자를 사용할 때 별칭을 제공하지 않는 경우 경로의 마지막 요소를 사용하여 행을 참조할 수 있습니다. 예를 들어 `SELECT price FROM S3Object[*].books[*].price` 쿼리를 사용하여 서적 목록에서 모든 가격을 선택할 수 있습니다. 경로가 이름 대신 와일드카드 문자로 끝날 경우 값 `_1`을 사용하여 행을 참조할 수 있습니다. 예를 들면 `SELECT price FROM S3Object[*].books[*].price` 대신 `SELECT _1.price FROM S3Object[*].books[*]`를 사용할 수 있습니다.
Amazon S3 Select는 JSON 문서를 항상 루트 수준 값의 배열로 취급합니다. 따라서 쿼리하는 JSON 객체가 하나의 루트 요소만 가지더라도 `FROM` 절이 `S3Object[*]`로 시작해야 합니다. 하지만 사용자가 경로를 포함하지 않을 경우 Amazon S3 Select는 호환성을 이유로 와일드카드 문자를 생략하도록 허용합니다. 따라서 전체 절 `FROM S3Object`는 `FROM S3Object[*] as S3Object`와 같습니다. 경로를 포함하는 경우에는 와일드카드 문자도 사용해야 합니다. 그러므로 `FROM S3Object` 및 `FROM S3Object[*].path`는 모두 유효한 절이지만, `FROM S3Object.path`는 유효하지 않습니다.

**Example**  
**예시:**  
*예제 \$11*  
이 예제에서는 다음 데이터 세트 및 쿼리를 사용할 때의 결과를 보여 줍니다.  

```
{ "Rules": [ {"id": "1"}, {"expr": "y > x"}, {"id": "2", "expr": "z = DEBUG"} ]}
{ "created": "June 27", "modified": "July 6" }
```

```
SELECT id FROM S3Object[*].Rules[*].id
```

```
{"id":"1"}
{}
{"id":"2"}
{}
```
Amazon S3 Select가 각 결과를 반환한 이유는 다음과 같습니다.  
+ `{"id":"id-1"}` – `S3Object[0].Rules[0].id`가 일치하는 레코드를 생성했습니다.
+ `{}` – `S3Object[0].Rules[1].id`는 일치하는 레코드가 없으므로 Amazon S3 Select가 `MISSING`을 출력했습니다. 이 값은 출력 직렬화 과정에서 빈 레코드로 변환 후 반환되었습니다.
+ `{"id":"id-2"}` – `S3Object[0].Rules[2].id`가 일치하는 레코드를 생성했습니다.
+ `{}` – `S3Object[1]`는 `Rules`에서 일치하는 레코드가 없으므로 Amazon S3 Select가 `MISSING`을 출력했습니다. 이 값은 출력 직렬화 과정에서 빈 레코드로 변환 후 반환되었습니다.
Amazon S3 Select가 일치 레코드를 찾지 못할 경우 빈 레코드를 반환하지 않도록 값 `MISSING`에 대해 테스트를 할 수 있습니다. 다음 쿼리는 이전 쿼리와 동일한 결과를 반환하지만 빈 값이 생략되었습니다.  

```
SELECT id FROM S3Object[*].Rules[*].id WHERE id IS NOT MISSING
```

```
{"id":"1"}
{"id":"2"}
```
*예제 \$12*  
이 예제에서는 다음 데이터 세트 및 쿼리를 사용할 때의 결과를 보여 줍니다.  

```
{ "created": "936864000", "dir_name": "important_docs", "files": [ { "name": "." }, { "name": ".." }, { "name": ".aws" }, { "name": "downloads" } ], "owner": "Amazon S3" }
{ "created": "936864000", "dir_name": "other_docs", "files": [ { "name": "." }, { "name": ".." }, { "name": "my stuff" }, { "name": "backup" } ], "owner": "User" }
```

```
SELECT d.dir_name, d.files FROM S3Object[*] d
```

```
{"dir_name":"important_docs","files":[{"name":"."},{"name":".."},{"name":".aws"},{"name":"downloads"}]}
{"dir_name":"other_docs","files":[{"name":"."},{"name":".."},{"name":"my stuff"},{"name":"backup"}]}
```

```
SELECT _1.dir_name, _1.owner FROM S3Object[*]
```

```
{"dir_name":"important_docs","owner":"Amazon S3"}
{"dir_name":"other_docs","owner":"User"}
```

## WHERE 절
<a name="s3-select-sql-reference-where"></a>

`WHERE` 절은 다음 구문에 따릅니다.

```
WHERE condition
```

`WHERE` 절은 `condition`에 기반하여 행을 필터링합니다. 조건은 부울 결과가 있는 표현식입니다. 조건이 `TRUE`로 평가되는 행만이 결과에서 반환됩니다.

## LIMIT 절
<a name="s3-select-sql-reference-limit"></a>

`LIMIT` 절은 다음 구문에 따릅니다.

```
LIMIT number
```

`LIMIT` 절은 쿼리가 반환하게 할 레코드의 수를 `number`에 기초하여 제한합니다.

## 속성 액세스
<a name="s3-select-sql-reference-attribute-access"></a>

`SELECT`와 `WHERE` 절은 쿼리되는 파일이 CSV 형식인지 JSON 형식인지에 따라 다음 단원에서 소개하는 메서드 중 하나를 사용하여 레코드 데이터를 참조할 수 있습니다.

### CSV
<a name="s3-select-sql-reference-attribute-access-csv"></a>
+ ****열 번호 – 열 이름 `_N`으로 특정 행의 *N번째* 열을 참조할 수 있습니다(여기서 *`N`*은 열의 위치입니다). 위치 카운트는 1에서 시작합니다. 예를 들어, 첫 번째 열의 이름은 `_1`이고, 두 번째 열의 이름은 `_2`입니다.

  열을 `_N` 또는 `alias._N`이라고 부를 수 있습니다. 예를 들어, `_2`와 `myAlias._2`는 모두 `SELECT` 목록과 `WHERE` 절에 있는 열을 참조하는 유효한 방법입니다.
+ **열 머리글** – 머리글 행이 있는 CSV 형식의 객체들은 그 머리글이 `SELECT` 목록과 `WHERE` 절에 제공됩니다. 특히 기존의 SQL과 같이, `SELECT`와 `WHERE` 절 표현식에서 `alias.column_name` 또는 `column_name`으로 열을 참조할 수 있습니다.

### JSON
<a name="s3-select-sql-reference-attribute-access-json"></a>
+ **문서** – `alias.name`으로 JSON 문서 필드에 액세스할 수 있습니다. 중첩 필드에도 액세스할 수 있습니다(예: `alias.name1.name2.name3`).
+ ****목록 – `[]` 연산자가 있는 0 기반 인덱스를 사용하여 JSON 목록의 요소들에 액세스할 수 있습니다. 예를 들어, 목록의 두 번째 요소에 `alias[1]`로 액세스할 수 있습니다. 액세스 목록 요소를 필드와 결합할 수 있습니다 (예: `alias.name1.name2[1].name3`).
+ **예제:** 이 JSON 객체를 샘플 데이터 세트로 간주합니다.

  ```
  {"name": "Susan Smith",
  "org": "engineering",
  "projects":
      [
       {"project_name":"project1", "completed":false},
       {"project_name":"project2", "completed":true}
      ]
  }
  ```

  *예제 1.*

  다음 쿼리는 다음과 같은 결과를 반환합니다.

  ```
  Select s.name from S3Object s
  ```

  ```
  {"name":"Susan Smith"}
  ```

  *예제 2.*

  다음 쿼리는 다음과 같은 결과를 반환합니다.

  ```
  Select s.projects[0].project_name from S3Object s
  ```

  ```
  {"project_name":"project1"}
  ```

## 머리글 및 속성 이름의 대/소문자 구분
<a name="s3-select-sql-reference-case-sensitivity"></a>

Amazon S3 Select에서 큰 따옴표를 사용하여 열 머리글(CSV 객체)과 속성(JSON 객체)이 대/소문자를 구분한다는 것을 표시할 수 있습니다. 큰 따옴표가 없으면 객체 머리글 및 속성이 대/소문자를 구분하지 않는 것입니다. 모호한 경우에는 오류가 발생합니다.

다음 예제는 1) 지정된 열 헤더가 있고 쿼리 요청에 대해 `FileHeaderInfo`가 "`"Use"`"으로 설정된 CSV 형식의 Amazon S3 객체 또는 2) 지정된 속성이 있는 JSON 형식의 Amazon S3 객체입니다.

**예제 \$11: 쿼리되는 객체가 머리글 또는 속성 `NAME`을 갖습니다.
+ 다음 표현식은 객체에서 값을 성공적으로 반환합니다. 따옴표가 없으므로 쿼리는 대소문자를 구분하지 않습니다.

  ```
  SELECT s.name from S3Object s
  ```
+ 다음 표현식은 400 오류 `MissingHeaderName`을 발생시킵니다. 따옴표가 있으므로 쿼리는 대소문자를 구분합니다.

  ```
  SELECT s."name" from S3Object s
  ```

**예제 \$12: 쿼리되는 Amazon S3 객체에 `NAME`이 있는 머리글 또는 속성이 하나 있고 `name`이 있는 머리글 또는 속성이 또 있습니다.
+ 다음 표현식은 400 오류 `AmbiguousFieldName`을 발생시킵니다. 따옴표가 없으므로 대소문자를 구분하지 않는 쿼리지만 일치하는 항목이 두 개 있으므로 오류가 발생합니다.

  ```
  SELECT s.name from S3Object s
  ```
+ 다음 표현식은 객체에서 값을 성공적으로 반환합니다. 따옴표가 있어 쿼리는 대/소문자를 구분하므로 모호하지 않습니다.

  ```
  SELECT s."NAME" from S3Object s
  ```

## 예약어를 사용자 정의 용어로 사용
<a name="s3-select-sql-reference-using-keywords"></a>

Amazon S3 Select에는 객체 콘텐츠를 쿼리하는 데 사용되는 SQL 표현식을 실행하기 위해 필요한 일련의 예약어가 있습니다. 예약어에는 함수 이름, 데이터 유형, 연산자 등이 포함됩니다. 어떤 경우에는 열 머리글(CSV 파일의 경우) 또는 속성(JSON 객체의 경우)과 같은 사용자 정의 용어가 예약어와 충돌할 수 있습니다. 이 경우에는 예약어와 충돌하는 사용자 정의 용어를 일부러 사용하고 있다는 것을 큰 따옴표를 사용하여 표시해야 합니다. 이렇게 하지 않으면 400 구문 분석 오류가 발생할 것입니다.

예약어의 전체 목록은 [예약어](s3-select-sql-reference-keyword-list.md) 단원을 참조하세요.

다음 예제는 1) 열 머리글이 지정되어 있고 쿼리 요청에 대해 `FileHeaderInfo`가 `"Use"`으로 설정되어 있는 CSV 형식의 Amazon S3 객체 또는 2) 속성이 지정된 JSON 형식의 Amazon S3 객체 중 하나입니다.

**예제: 쿼리되는 객체에는 예약어인 `CAST`라는 헤더 또는 속성이 있습니다.
+ 다음 표현식은 객체에서 값을 성공적으로 반환합니다. 쿼리에 따옴표가 사용되므로 S3 Select는 사용자 정의 머리글 또는 속성을 사용합니다.

  ```
  SELECT s."CAST" from S3Object s
  ```
+ 다음 표현식은 400 오류 을 발생시킵니다. 쿼리에는 따옴표가 사용되지 않으므로 예약된 키워드와 `CAST`가 충돌합니다.

  ```
  SELECT s.CAST from S3Object s
  ```

## 스칼라 표현식
<a name="s3-select-sql-reference-scalar"></a>

`WHERE` 절과 `SELECT` 목록 내에서 스칼라 값을 반환하는 표현식인 SQL *스칼라 표현식*을 사용할 수 있습니다. 스칼라 표현식의 형식은 다음과 같습니다.
+ ***`literal`*** 

  SQL 리터럴.
+ ***`column_reference`*** 

  `column_name` 또는 `alias.column_name` 형식의 열에 대한 참조입니다.
+ **`unary_op`** **`expression`** 

  이 경우 ****`unary_op`****는 SQL 단항 연산자입니다.
+ **`expression`** **`binary_op`** ***`expression`*** 

   이 경우 ****`binary_op`****는 SQL 이항 연산자입니다.
+ **`func_name`** 

   이 경우 **`func_name`**은 호출할 스칼라 함수의 이름입니다.
+ ***`expression`*** `[ NOT ] BETWEEN` ****`expression`**** `AND` ****`expression`****
+ ***`expression`*** `LIKE` ****`expression`**** [ `ESCAPE` ***`expression`*** ]

# 데이터 타입
<a name="s3-select-sql-reference-data-types"></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에서는 몇 가지 기본 데이터 형식을 지원합니다.

## 데이터 형식 변환
<a name="s3-select-sql-reference-data-conversion"></a>

일반적 규칙은 `CAST` 함수에 따르는 것입니다(정의된 경우). `CAST`를 정의하지 않는 경우, 모든 입력 데이터를 문자열로 취급합니다. 이 경우 필요한 경우 입력 데이터를 관련 데이터 유형으로 캐스팅해야 합니다.

`CAST` 함수에 대한 자세한 내용은 [CAST](s3-select-sql-reference-conversion.md#s3-select-sql-reference-cast) 단원을 참조하십시오.

## 지원되는 데이터 유형
<a name="s3-select-sql-reference-supported-data-types"></a>

Amazon S3 Select에서는 다음과 같은 일련의 기본 데이터 형식들을 지원합니다.


|  이름  |  설명  |  예제  | 
| --- | --- | --- | 
| `bool` | 부울 값으로 `TRUE` 또는 `FALSE` 둘 중 하나입니다. | `FALSE` | 
| `int`, `integer` | 9,223,372,036,854,775,808 \$1 9,223,372,036,854,775,807 범위의 8바이트 부호 있는 정수입니다. | `100000` | 
| `string` | UTF8로 인코딩된 가변 길이 문자열입니다. 기본 한도는 1자입니다. 최대 문자 한도는 2,147,483,647입니다. | `'xyz'` | 
| `float` | 8바이트 부동 소수점 숫자입니다. | `CAST(0.456 AS FLOAT)` | 
| `decimal`, `numeric` |  최대 정밀도(최대 유효 숫자 수)가 38이고, 스케일 범위가 -231\$1231-1(십진수 지수)인 10진수입니다.  사용자가 그 두 가지를 동시에 제공하면 Amazon S3 Select는 스케일과 정밀도를 무시합니다.   | `123.456 ` | 
| `timestamp` |  타임스탬프는 시간상 특정 순간을 나타내며, 항상 로컬 오프셋을 포함하고, 임의 정밀도가 가능합니다. 텍스트 형식에서 타임스탬프는 [날짜 및 시간 형식에 대한 W3C 노트](https://www.w3.org/TR/NOTE-datetime)를 따르지만 적어도 종일 정밀도가 아니라면 리터럴 `T`로 끝나야 합니다. 소수부 초는 한 자리 이상의 정밀도와 무한대의 최대값을 포함하여 허용됩니다. 로컬 시간 오프셋은 UTC로부터의 hour:minute 오프셋이나 UTC의 로컬 시간을 가리키는 리터럴 `Z`로 나타낼 수 있습니다. 로컬 시간 오프셋은 시간이 포함된 타임스탬프에서 필수이며, 날짜 값에서는 허용되지 않습니다.  | `CAST('2007-04-05T14:30Z' AS TIMESTAMP)` | 

### 지원되는 Parquet 유형
<a name="s3-select-sql-reference-supported-data-types-parquet"></a>

Amazon S3 Select는 다음과 같은 Parquet 유형을 지원합니다.
+ `DATE`
+ `DECIMAL`
+ `ENUM`
+ `INT(8)`
+ `INT(16)`
+ `INT(32)`
+ `INT(64)`
+ `LIST`
**참고**  
`LIST` Parquet 유형 출력의 경우, Amazon S3 Select는 JSON 형식만 지원합니다. 단, 쿼리에서 데이터를 단순 값으로 제한하는 경우 `LIST` Parquet 유형도 CSV 형식으로 쿼리할 수 있습니다.
+ `STRING`
+ `TIMESTAMP` 지원되는 정밀도(`MILLIS`/`MICROS`/`NANOS`)
**참고**  
`INT(96)`로 저장된 타임스탬프는 지원되지 않습니다.  
`INT(64)` 유형의 범위로 인해 `NANOS` 단위를 사용하는 타임스탬프는 `1677-09-21 00:12:43`과 `2262-04-11 23:47:16` 사이의 값만 나타낼 수 있습니다. 이 범위를 벗어난 값은 `NANOS` 단위로 나타낼 수 없습니다.

### Amazon S3 Select에서 Parquet 유형을 지원되는 데이터 유형에 매핑
<a name="s3-select-sql-reference-supported-data-types-parquet-mapping"></a>


| Parquet 유형 | 지원되는 데이터 유형 | 
| --- | --- | 
| `DATE` |  `timestamp`  | 
|  `DECIMAL`  |  `decimal`, `numeric`  | 
|  `ENUM`  |  `string`  | 
|  `INT(8)`  |  `int`, `integer`  | 
|  `INT(16)`  | `int`, `integer` | 
| `INT(32)` | `int`, `integer` | 
|  `INT(64)`  |  `decimal`, `numeric`  | 
|  `LIST`  |  목록의 각 Parquet 유형은 해당 데이터 유형에 매핑됩니다.  | 
|  `STRING`  |  `string`  | 
|  `TIMESTAMP`  |  `timestamp`  | 

# 연산자
<a name="s3-select-sql-reference-operators"></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에서는 다음과 같은 연산자들을 지원합니다.

## 논리 연산자
<a name="s3-select-sql-reference-loical-ops"></a>
+ `AND`
+ `NOT`
+ `OR`

## 비교 연산자
<a name="s3-select-sql-reference-compare-ops"></a>
+ `<` 
+ `>` 
+ `<=`
+ `>=`
+ `=`
+ `<>`
+ `!=`
+ `BETWEEN`
+ `IN`예:`IN ('a', 'b', 'c')` .

  

## 패턴 일치 연산자
<a name="s3-select-sql-reference-pattern"></a>
+ `LIKE`
+ `_`(모든 문자를 일치시킵니다.)
+ `%`(모든 문자 시퀀스를 일치시킵니다.)

## 단일 연산자
<a name="s3-select-sql-reference-unitary-ops"></a>
+ `IS NULL`
+ `IS NOT NULL`

## 수학 연산자
<a name="s3-select-sql-referencemath-ops"></a>

다음과 같이 더하기, 빼기, 곱하기, 나누기 및 모듈로가 지원됩니다.
+ \$1
+ -
+ \$1
+ /
+ %

## 연산자 우선순위
<a name="s3-select-sql-reference-op-Precedence"></a>

다음 표에서는 연산자들의 우선 순위를 내림차순으로 보여줍니다.


|  연산자 또는 원소  |  연결성 |  필수  | 
| --- | --- | --- | 
| `-`  | 오른쪽  | 단항 마이너스  | 
| `*`, `/`, `%`  | 왼쪽  | 곱하기, 나누기, 모듈로  | 
| `+`, `-`  | 왼쪽  | 더하기, 빼기  | 
| `IN` |  | 집합 소속  | 
| `BETWEEN` |  | 범위 제한  | 
| `LIKE` |  | 문자열 패턴 일치  | 
| `<``>` |  | 보다 작음, 보다 큼  | 
| `=` | 오른쪽  | 같음, 대입 | 
| `NOT` | 오른쪽 | 논리 부정  | 
| `AND` | 왼쪽 | 논리 결합  | 
| `OR` | 왼쪽 | 논리 분리  | 

# 예약어
<a name="s3-select-sql-reference-keyword-list"></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 표현식을 실행하는 데 필요한 함수 이름, 데이터 형식, 연산자 등이 포함되어 있습니다.

```
absolute
action
add
all
allocate
alter
and
any
are
as
asc
assertion
at
authorization
avg
bag
begin
between
bit
bit_length
blob
bool
boolean
both
by
cascade
cascaded
case
cast
catalog
char
char_length
character
character_length
check
clob
close
coalesce
collate
collation
column
commit
connect
connection
constraint
constraints
continue
convert
corresponding
count
create
cross
current
current_date
current_time
current_timestamp
current_user
cursor
date
day
deallocate
dec
decimal
declare
default
deferrable
deferred
delete
desc
describe
descriptor
diagnostics
disconnect
distinct
domain
double
drop
else
end
end-exec
escape
except
exception
exec
execute
exists
external
extract
false
fetch
first
float
for
foreign
found
from
full
get
global
go
goto
grant
group
having
hour
identity
immediate
in
indicator
initially
inner
input
insensitive
insert
int
integer
intersect
interval
into
is
isolation
join
key
language
last
leading
left
level
like
limit
list
local
lower
match
max
min
minute
missing
module
month
names
national
natural
nchar
next
no
not
null
nullif
numeric
octet_length
of
on
only
open
option
or
order
outer
output
overlaps
pad
partial
pivot
position
precision
prepare
preserve
primary
prior
privileges
procedure
public
read
real
references
relative
restrict
revoke
right
rollback
rows
schema
scroll
second
section
select
session
session_user
set
sexp
size
smallint
some
space
sql
sqlcode
sqlerror
sqlstate
string
struct
substring
sum
symbol
system_user
table
temporary
then
time
timestamp
timezone_hour
timezone_minute
to
trailing
transaction
translate
translation
trim
true
tuple
union
unique
unknown
unpivot
update
upper
usage
user
using
value
values
varchar
varying
view
when
whenever
where
with
work
write
year
zone
```

# 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!@#$'
```