SnowConvert AI - Teradata - Teradata의 세션 모드

Teradata 세션 모드 설명

Teradata 데이터베이스에는 쿼리 실행을 위한 ANSI 모드(ANSI SQL: 2011 사양에 기반한 규칙) 및 TERA 모드(Teradata에서 정의한 규칙)의 여러 모드가 있습니다. 자세한 내용은 다음 Teradata 설명서 를 검토하십시오.

문자열 정보 테이블용 Teradata 모드

문자열의 경우, Teradata 모드는 다르게 작동합니다. Teradata 설명서 를 기반으로한 다음 테이블의 설명을 따릅니다.

특징

ANSI 모드

Teradata 모드

문자 비교를 위한 기본 특성

CASESPECIFIC

NOT CASESPECIFIC

기본 TRIM 동작

TRIM(BOTH FROM)

TRIM(BOTH FROM)

변환 사양 요약

ModeColumn constraint valuesTeradata behaviorSC expected behavior
ANSI ModeCASESPECIFICCASESPECIFICNo constraint added.
NOT CASESPECIFICCASESPECIFICAdd COLLATE 'en-cs' in column definition.
Teradata ModeCASESPECIFICCASESPECIFICIn most cases, do not add COLLATE, and convert its usages of string comparison to RTRIM( expression )
NOT CASESPECIFICNOT CASESPECIFICIn most cases, do not add COLLATE, and convert its usages of string comparison to RTRIM(UPPER( expression ))

사용 가능한 변환 사양 옵션

문자열 비교를 위한 ANSI 모드 - COLLATE

이 섹션에서는 COLLATE를 사용하여 ANSI 모드의 문자열에 대한 변환 사양을 정의합니다.

설명

문자열 비교 및 COLLATE 사용을 위한 ANSI 모드

ANSI 모드 문자열 비교는 필수에 따라 열 또는 문에 COLLATE 제약 조건을 적용합니다. 기본 대/소문자 사양 트림 동작을 고려할 수 있습니다.

Teradata에서 기본 대/소문자 사양은 ‘CASESPECIFIC’이며, 이는 Snowflake ‘대/소문자 구분' 과 동일한 기본값입니다. 따라서 이러한 경우에는 중복되므로 COLLATE 로 변환되지 않습니다.

샘플 소스 패턴

설정 데이터

Teradata
 CREATE TABLE employees (
    employee_id INTEGER NOT NULL,
    first_name VARCHAR(50) NOT CASESPECIFIC,
    last_name VARCHAR(50) CASESPECIFIC,
    department VARCHAR(50)
);

INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (1, 'George', 'Snow', 'Sales');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (2, 'John', 'SNOW', 'Engineering');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (3, 'WIlle', 'SNOW', 'Human resources   ');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (4, 'Marco', 'SnoW   ', 'EngineerinG');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (5, 'Mary', '   ', 'SaleS  ');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (6, 'GEORGE', '  ', 'sales  ');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (7, 'GEORGE   ', '  ', 'salEs  ');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (8, '    GeorgE   ', '  ', 'SalEs  ');
INSERT INTO employees (employee_id, first_name, last_name, department) VALUES (9, 'JOHN', '   SnoW', 'IT');
INSERT INTO employees (employee_id, first_name, last_name, department) VALUES (10, 'JOHN    ', 'snow', 'Finance   ');

CREATE TABLE departments (
    department_id INTEGER NOT NULL,
    department_name VARCHAR(50) NOT CASESPECIFIC,
    location VARCHAR(100) CASESPECIFIC,
    PRIMARY KEY (department_id)
);


INSERT INTO departments (department_id, department_name, location) VALUES (101, 'Information Technology', 'New York');
INSERT INTO departments (department_id, department_name, location) VALUES (102, 'Human Resources', 'Chicago');
INSERT INTO departments (department_id, department_name, location) VALUES (103, 'Sales', 'San Francisco');
INSERT INTO departments (department_id, department_name, location) VALUES (104, 'Finance', 'Boston');
Copy
Snowflake
 CREATE OR REPLACE TABLE employees (
    employee_id INTEGER NOT NULL,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    department VARCHAR(50)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/02/2025",  "domain": "no-domain-provided" }}'
;

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (1, 'George', 'Snow', 'Sales');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (2, 'John', 'SNOW', 'Engineering');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (3, 'WIlle', 'SNOW', 'Human resources   ');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (4, 'Marco', 'SnoW   ', 'EngineerinG');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (5, 'Mary', '   ', 'SaleS  ');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (6, 'GEORGE', '  ', 'sales  ');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (7, 'GEORGE   ', '  ', 'salEs  ');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (8, '    GeorgE   ', '  ', 'SalEs  ');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (9, 'JOHN', '   SnoW', 'IT');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (10, 'JOHN    ', 'snow', 'Finance   ');

CREATE OR REPLACE TABLE departments (
    department_id INTEGER NOT NULL,
    department_name VARCHAR(50),
    location VARCHAR(100),
       PRIMARY KEY (department_id)
   )
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "07/02/2025",  "domain": "no-domain-provided" }}'
;

INSERT INTO departments (department_id, department_name, location)
VALUES (101, 'Information Technology', 'New York');

INSERT INTO departments (department_id, department_name, location)
VALUES (102, 'Human Resources', 'Chicago');

INSERT INTO departments (department_id, department_name, location)
VALUES (103, 'Sales', 'San Francisco');

INSERT INTO departments (department_id, department_name, location)
VALUES (104, 'Finance', 'Boston');
Copy

비교 연산

케이스 1: 열 제약 조건이 NOT CASESPECIFIC 이고 데이터베이스 모드가 ANSI 모드인 경우
Teradata
쿼리
 SELECT *
FROM employees
WHERE first_name = 'GEorge ';
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

Snowflake
쿼리
 SELECT
    *
FROM
    employees
WHERE
    COLLATE(first_name, 'en-cs-rtrim') = RTRIM('George');
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

케이스 2: 열 제약 조건이 CASESPECIFIC 이고 데이터베이스 모드가 ANSI 모드인 경우
Teradata
쿼리
 SELECT *
FROM employees
WHERE last_name = 'SNOW ';
Copy
출력

employee_id

first_name

last_name

department

3

WIlle

SNOW

인적 리소스

2

John

SNOW

Engineering

Snowflake
쿼리
SELECT
 *
FROM
 employees
WHERE
 RTRIM(last_name) = RTRIM('SNOW ');
Copy
출력

employee_id

first_name

last_name

department

3

WIlle

SNOW

인적 리소스

2

John

SNOW

Engineering

케이스 3: CAST NOT CASESPECIFIC 열을 CASESPECIFIC 으로, 데이터베이스 모드는 ANSI 모드
Teradata
쿼리
 SELECT * FROM employees WHERE first_name = 'George   ' (CASESPECIFIC);
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

Snowflake

참고

COLLATE ‘en-cs’는 기능적 동등성을 위해 필요합니다.

쿼리
 SELECT
    *
FROM
    employees
WHERE
    COLLATE(first_name, 'en-cs-rtrim') = 'George   ' /*** SSC-FDM-TD0032 - CASESPECIFIC CLAUSE WAS REMOVED ***/;
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

케이스 4: CAST CASESPECIFIC 열을 NOT CASESPECIFIC 으로, 데이터베이스 모드는 ANSI 모드
Teradata
쿼리
 SELECT * FROM employees WHERE first_name = 'GEorge   ' (NOT CASESPECIFIC) ;
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

6

GEORGE

영업

7

GEORGE

영업

Snowflake
쿼리
 SELECT
   *
FROM
   employees
WHERE
   RTRIM(first_name) = RTRIM('GEorge   ' /*** SSC-FDM-TD0032 - NOT CASESPECIFIC CLAUSE WAS REMOVED ***/);
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

6

GEORGE

영업

7

GEORGE

영업

케이스 5: CAST NOT CASESPECIFIC 열을 NOT CASESPECIFIC 으로, 데이터베이스 모드는 ANSI 모드
Teradata
쿼리
 SELECT * FROM employees WHERE first_name (NOT CASESPECIFIC)  = 'George    ';
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

Snowflake

참고

여기에는 COLLATE 가 필요합니다.

쿼리
 SELECT
   * 
FROM
   employees
WHERE
   COLLATE(first_name /*** SSC-FDM-TD0032 - NOT CASESPECIFIC CLAUSE WAS REMOVED ***/, 'en-cs-rtrim') = 'George    ';
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

LIKE 작업

케이스 1: 열 제약 조건이 NOT CASESPECIFIC 이고 데이터베이스 모드가 ANSI 모드인 경우
Teradata
쿼리
 SELECT *
FROM employees
WHERE first_name LIKE 'George';
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

Snowflake
쿼리
 SELECT *
FROM employees
WHERE COLLATE(first_name, 'en-cs-rtrim') LIKE 'George';
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

케이스 2: 열 제약 조건이 CASESPECIFIC 이고 데이터베이스 모드가 ANSI 모드인 경우
Teradata
쿼리
 SELECT *
FROM employees
WHERE last_name LIKE 'Snow';
Copy
출력

employee_id

first_name

last_name

department

2

John

SNOW

Engineering

3

WIlle

SNOW

인적 리소스

Snowflake
쿼리
 SELECT *
FROM employees
WHERE RTRIM(last_name) LIKE RTRIM('Snow');
Copy
출력

employee_id

first_name

last_name

department

2

John

SNOW

Engineering

3

WIlle

SNOW

인적 리소스

케이스 3: CAST NOT CASESPECIFIC 열을 CASESPECIFIC 으로, 데이터베이스 모드는 ANSI 모드
Teradata
쿼리
 SELECT *
FROM employees
WHERE first_name LIKE 'Mary' (CASESPECIFIC);
Copy
출력

employee_id

first_name

last_name

department

5

Mary

SaleS

Snowflake
쿼리
 SELECT
   *
FROM
   employees
WHERE
   COLLATE(first_name, 'en-cs-rtrim') LIKE 'Mary' /*** SSC-FDM-TD0032 - CASESPECIFIC CLAUSE WAS REMOVED ***/;
Copy
출력

employee_id

first_name

last_name

department

5

Mary

SaleS

케이스 4: CAST CASESPECIFC 열을 NOT CASESPECIFIC 으로, 데이터베이스 모드는 ANSI 모드
Teradata
쿼리
 SELECT *
FROM employees
WHERE last_name LIKE 'SNO%' (NOT CASESPECIFIC);
Copy
출력

employee_id

first_name

last_name

department

2

John

SNOW

Engineering

3

WIlle

SNOW

인적 리소스

Snowflake
쿼리
 SELECT
   *
FROM
   employees
WHERE
   RTRIM(last_name) LIKE RTRIM('SNO%' /*** SSC-FDM-TD0032 - NOT CASESPECIFIC CLAUSE WAS REMOVED ***/);
Copy
출력

employee_id

first_name

last_name

department

2

John

SNOW

Engineering

3

WIlle

SNOW

인적 리소스

IN 작업

케이스 1: 열 제약 조건이 NOT CASESPECIFIC 이고 데이터베이스 모드가 ANSI 모드인 경우
Teradata
쿼리
 SELECT *
FROM employees
WHERE first_name IN ('George   ');
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

Snowflake

참고

이 경우 COLLATE(_ column_name_ , 'en-cs-rtrim') 가 필요합니다

쿼리
 SELECT
   *
FROM
   employees
WHERE
   RTRIM(first_name) IN (COLLATE('George   ', 'en-cs-rtrim'));
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

케이스 2: 열 제약 조건이 CASESPECIFIC 이고 데이터베이스 모드가 ANSI 모드인 경우
Teradata

참고

이 경우 열에 열 제약 조건이 없지만 Teradata ANSI 모드의 기본 제약 조건은 CASESPECIFIC 입니다.

쿼리
 SELECT *
FROM employees
WHERE department IN ('EngineerinG    ');
Copy
출력

employee_id

first_name

last_name

department

4

Marco

SnoW

EngineerinG

Snowflake
쿼리
 SELECT
   *
FROM
   employees
WHERE
   RTRIM(department) IN (RTRIM('EngineerinG    '));
Copy
출력

employee_id

first_name

last_name

department

4

Marco

SnoW

EngineerinG

ORDER BY 절

케이스 1: 열 제약 조건이 NOT CASESPECIFIC 이고 데이터베이스 모드가 ANSI 모드인 경우
Teradata
쿼리
 SELECT first_name
FROM employees
ORDER BY first_name;
Copy
출력

first_name

GeorgE

GEORGE

GEORGE

George

John

JOHN

JOHN

Marco

Mary

WIlle

Snowflake

경고

FDM 을 검토하십시오. _ 추가할 보류 중. _

쿼리
 SELECT
   first_name
FROM
   employees
ORDER BY first_name;
Copy
출력

first_name

GeorgE

George

GEORGE

GEORGE

John

JOHN

JOHN

Marco

Mary

WIlle

케이스 2: 열 제약 조건이 CASESPECIFIC 이고 데이터베이스 모드가 ANSI 모드인 경우
Teradata
쿼리
 SELECT last_name
FROM employees
ORDER BY last_name;
Copy
출력

department

EngineerinG

Engineering

Finance

인적 리소스

IT

SalEs

SaleS

Sales

영업

영업

Snowflake
쿼리
 SELECT
   last_name
FROM
   employees
ORDER BY last_name;
Copy
출력

department

EngineerinG

Engineering

Finance

인적 리소스

IT

SalEs

SaleS

Sales

영업

영업

GROUP BY 절

케이스 1: 열 제약 조건이 NOT CASESPECIFIC 이고 데이터베이스 모드가 ANSI 모드인 경우
Teradata
쿼리
 SELECT first_name
FROM employees
GROUP BY first_name;
Copy
출력

first_name

Mary

GeorgE

WIlle

JOHN

Marco

GEORGE

Snowflake

경고

케이스 또는 순서에 따라 출력 내용이 다를 수 있습니다.

참고

RTRIM 은 선택한 열에 필수입니다.

쿼리
   SELECT
   first_name
  FROM
   employees
  GROUP BY first_name;
Copy
출력

first_name

John

Marco

George

GeorgE

WIlle

Mary

케이스 2: 열 제약 조건이 CASESPECIFIC 이고 데이터베이스 모드가 ANSI 모드인 경우
Teradata
쿼리
 SELECT last_name
FROM employees
GROUP BY last_name;
Copy
출력

last_name

SnoW

SNOW

SnoW

Snow

snow

Snowflake

참고

순서는 다를 수 있습니다.

쿼리
 SELECT
   last_name
  FROM
   employees
  GROUP BY last_name;
Copy
출력

first_name

Snow

SNOW

SnoW

SnoW

snow

HAVING 절

HAVING 절은 다음에서 이 패턴을 사용합니다.

  • 평가 연산.

    • 예: =, !=, <, >.

  • LIKE 작업.

  • IN 작업.

  • CAST 를 평가 연산으로

  • CAST 를 LIKE 연산으로

다음 샘플은 평가 작업이 포함된 패턴을 보여줍니다.

샘플: 열 제약 조건은 NOT CASESPECIFIC , 데이터베이스 모드는 ANSI 모드입니다
Teradata
쿼리
 SELECT first_name
FROM employees
GROUP BY first_name
HAVING first_name = 'Mary';
Copy
출력
Mary

Copy
Snowflake
쿼리
 SELECT
  first_name
FROM
  employees
GROUP BY first_name
HAVING
   COLLATE(first_name, 'en-cs-rtrim') = 'Mary';
Copy
출력
Mary

Copy

CASE WHEN 문

CASE WHEN 문은 설명된 패턴을 사용합니다.

  • 평가 연산.

    • 예: =, !=, <, >.

  • LIKE 작업.

  • IN 작업.

  • CAST 를 평가 연산으로

  • CAST 를 LIKE 연산으로

다음 샘플은 평가 작업이 포함된 패턴을 보여줍니다.

Teradata
쿼리
 SELECT first_name,
      last_name,
      CASE
          WHEN department = 'EngineerinG' THEN 'Information Technology'
          WHEN first_name = '    GeorgE   ' THEN 'GLOBAL SALES'
          ELSE 'Other'
      END AS department_full_name
FROM employees
WHERE last_name = '';
Copy
출력

first_name

last_name

department_full_name

GEORGE

기타

Mary

기타

GeorgE

GLOBAL SALES

GEORGE

기타

Snowflake
쿼리
    SELECT
   first_name,
   last_name,
   CASE
         WHEN RTRIM(department) = RTRIM('EngineerinG')
            THEN 'Information Technology'
         WHEN COLLATE(first_name, 'en-cs-rtrim')  = '    GeorgE   '
            THEN 'GLOBAL SALES'
       ELSE 'Other'
   END AS department_full_name
FROM
   employees
WHERE RTRIM(last_name) = RTRIM('');
Copy
출력

first_name

last_name

department_full_name

Mary

기타

GEORGE

기타

GEORGE

기타

GeorgE

GLOBAL SALES

JOIN 절

경고

평가 작업이 포함된 간단한 시나리오가 지원됩니다.

JOIN 문은 설명된 패턴을 사용합니다.

  • 평가 연산.

    • 예: =, !=, <, >.

  • LIKE 작업.

  • IN 작업.

  • CAST 를 평가 연산으로

  • CAST 를 LIKE 연산으로

다음 샘플은 평가 작업이 포함된 패턴을 보여줍니다.

샘플: 열 제약 조건은 NOT CASESPECIFIC , 데이터베이스 모드는 ANSI 모드입니다
Teradata
쿼리
 SELECT
    e.employee_id,
    e.first_name,
    e.last_name,
    d.department_name
FROM
    employees e
JOIN
    departments d
ON
    e.department = d.department_name;
Copy
출력

employee_id

first_name

last_name

department_name

1

George

Snow

Sales

10

JOHN

snow

Finance

Snowflake

참고

d.department_nameNOT CASESPECIFIC 이므로 COLLATE 가 필요합니다.

쿼리
    SELECT
   e.employee_id,
   e.first_name,
   e.last_name,
   d.department_name
FROM
   employees e
JOIN
   departments d
ON COLLATE(e.department, 'en-cs-rtrim') = d.department_name;
Copy
출력

employee_id

first_name

last_name

department_name

1

George

Snow

Sales

10

JOHN

snow

Finance

문자열 비교를 위한 ANSI 모드 - NO COLLATE

이 섹션에서는 COLLATE를 사용하지 않고 ANSI 모드의 문자열에 대한 변환 사양을 정의합니다.

설명

문자열 비교 및 NO COLATE 사용을 위한 ANSI 모드.

COLLATE 를 사용하지 않는 ANSI 모드 문자열 비교는 필요에 따라 RTRIM 및 UPPER 를 적용합니다. 기본 대/소문자 사양 트림 동작이 고려될 수 있으므로 Teradata ANSI 모드에서 열에 대/소문자 사양이 없는 경우 Teradata는 기본값으로 CASESPECIFIC 을 갖습니다.

샘플 소스 패턴

설정 데이터

Teradata
 CREATE TABLE employees (
    employee_id INTEGER NOT NULL,
    first_name VARCHAR(50) NOT CASESPECIFIC,
    last_name VARCHAR(50) CASESPECIFIC,
    department VARCHAR(50)
);

INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (1, 'George', 'Snow', 'Sales');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (2, 'John', 'SNOW', 'Engineering');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (3, 'WIlle', 'SNOW', 'Human resources   ');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (4, 'Marco', 'SnoW   ', 'EngineerinG');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (5, 'Mary', '   ', 'SaleS  ');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (6, 'GEORGE', '  ', 'sales  ');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (7, 'GEORGE   ', '  ', 'salEs  ');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (8, '    GeorgE   ', '  ', 'SalEs  ');
INSERT INTO employees (employee_id, first_name, last_name, department) VALUES (9, 'JOHN', '   SnoW', 'IT');
INSERT INTO employees (employee_id, first_name, last_name, department) VALUES (10, 'JOHN    ', 'snow', 'Finance   ');

CREATE TABLE departments (
    department_id INTEGER NOT NULL,
    department_name VARCHAR(50) NOT CASESPECIFIC,
    location VARCHAR(100) CASESPECIFIC,
    PRIMARY KEY (department_id)
);


INSERT INTO departments (department_id, department_name, location) VALUES (101, 'Information Technology', 'New York');
INSERT INTO departments (department_id, department_name, location) VALUES (102, 'Human Resources', 'Chicago');
INSERT INTO departments (department_id, department_name, location) VALUES (103, 'Sales', 'San Francisco');
INSERT INTO departments (department_id, department_name, location) VALUES (104, 'Finance', 'Boston');
Copy
Snowflake
 CREATE OR REPLACE TABLE employees (
    employee_id INTEGER NOT NULL,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    department VARCHAR(50)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "10/30/2024",  "domain": "test" }}'
;

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (1, 'George', 'Snow', 'Sales');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (2, 'John', 'SNOW', 'Engineering');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (3, 'WIlle', 'SNOW', 'Human resources   ');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (4, 'Marco', 'SnoW   ', 'EngineerinG');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (5, 'Mary', '   ', 'SaleS  ');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (6, 'GEORGE', '  ', 'sales  ');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (7, 'GEORGE   ', '  ', 'salEs  ');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (8, '    GeorgE   ', '  ', 'SalEs  ');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (9, 'JOHN', '   SnoW', 'IT');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (10, 'JOHN    ', 'snow', 'Finance   ');

CREATE OR REPLACE TABLE departments (
    department_id INTEGER NOT NULL,
    department_name VARCHAR(50),
    location VARCHAR(100),
       PRIMARY KEY (department_id)
   )
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "10/30/2024",  "domain": "test" }}'
;

INSERT INTO departments (department_id, department_name, location)
VALUES (101, 'Information Technology', 'New York');

INSERT INTO departments (department_id, department_name, location)
VALUES (102, 'Human Resources', 'Chicago');

INSERT INTO departments (department_id, department_name, location)
VALUES (103, 'Sales', 'San Francisco');

INSERT INTO departments (department_id, department_name, location)
VALUES (104, 'Finance', 'Boston');
Copy

비교 연산

케이스 1: 열 제약 조건이 NOT CASESPECIFIC 이고 데이터베이스 모드가 ANSI 모드인 경우
Teradata
쿼리
 SELECT *
FROM employees
WHERE first_name = 'George      ';
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

Snowflake
쿼리
 SELECT
 *
FROM
employees
WHERE
RTRIM(first_name) = RTRIM('George      ');
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

케이스 2: 열 제약 조건이 CASESPECIFIC 이고 데이터베이스 모드가 ANSI 모드인 경우
Teradata
쿼리
 SELECT *
FROM employees
WHERE last_name = 'SNOW ';
Copy
출력

employee_id

first_name

last_name

department

3

WIlle

SNOW

인적 리소스

2

John

SNOW

Engineering

Snowflake
쿼리
 SELECT
 *
FROM
employees
WHERE
 RTRIM(last_name) = RTRIM('SNOW ');
Copy
출력

employee_id

first_name

last_name

department

3

WIlle

SNOW

인적 리소스

2

John

SNOW

Engineering

케이스 3: CAST NOT CASESPECIFIC 열을 CASESPECIFIC 으로, 데이터베이스 모드는 ANSI 모드

경고

(CASESPECIFIC)는 테이블 정의의 열 제약 조건을 덮어씁니다.

Teradata
쿼리
 SELECT * FROM employees WHERE first_name = 'GEorge   ' (CASESPECIFIC);
Copy
출력

employee_id

first_name

last_name

department

7

GEORGE

영업

6

GEORGE

영업

Snowflake
쿼리
 SELECT * FROM workers
WHERE RTRIM(first_name) = RTRIM(UPPER('GEorge   '));
Copy
출력

employee_id

first_name

last_name

department

7

GEORGE

영업

6

GEORGE

영업

케이스 4: CAST CASESPECIFIC 열을 NOT CASESPECIFIC 으로, 데이터베이스 모드는 ANSI 모드
Teradata
쿼리
 SELECT * FROM employees
WHERE last_name = 'SnoW   ' (NOT CASESPECIFIC) ;
Copy
출력

employee_id

first_name

last_name

department

4

Marco

SnoW

EngineerinG

Snowflake
쿼리
 SELECT * FROM employees
WHERE RTRIM(last_name) = RTRIM('SnoW   ');
Copy
출력

employee_id

first_name

last_name

department

4

Marco

SnoW

EngineerinG

LIKE 작업

케이스 1: 열 제약 조건이 NOT CASESPECIFIC 이고 데이터베이스 모드가 ANSI 모드인 경우
Teradata
쿼리
 SELECT *
FROM employees
WHERE first_name LIKE 'Georg%';
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

Snowflake
쿼리
 SELECT *
FROM employees
WHERE first_name LIKE 'Georg%';
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

케이스 2: 열 제약 조건이 CASESPECIFIC 이고 데이터베이스 모드가 ANSI 모드인 경우
Teradata
쿼리
 SELECT *
FROM employees
WHERE last_name LIKE 'Snow';
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

Snowflake
쿼리
 SELECT *
FROM employees
WHERE last_name LIKE 'Snow';
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

케이스 3: CAST NOT CASESPECIFIC 열을 NOT CASESPECIFIC 으로, 데이터베이스 모드는 ANSI 모드
Teradata
쿼리
 SELECT *
FROM employees
WHERE first_name LIKE 'George' (NOT CASESPECIFIC);
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

6

GEORGE

영업

Snowflake
쿼리
 SELECT
   *
FROM
   employees
WHERE
   first_name ILIKE 'George' /*** SSC-FDM-TD0032 - NOT CASESPECIFIC CLAUSE WAS REMOVED ***/;
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

6

GEORGE

영업

케이스 4: CAST CASESPECIFIC 열을 NOT CASESPECIFIC 으로, 데이터베이스 모드는 ANSI 모드
Teradata
쿼리
 SELECT *
FROM employees
WHERE last_name LIKE 'SNO%' (NOT CASESPECIFIC);
Copy
출력

employee_id

first_name

last_name

department

2

John

SNOW

Engineering

3

WIlle

SNOW

인적 리소스

Snowflake
쿼리
 SELECT
   *
FROM
   employees
WHERE
   last_name LIKE 'SNO%' /*** SSC-FDM-TD0032 - NOT CASESPECIFIC CLAUSE WAS REMOVED ***/;
Copy
출력

employee_id

first_name

last_name

department

2

John

SNOW

Engineering

3

WIlle

SNOW

인적 리소스

IN 작업

케이스 1: 열 제약 조건이 NOT CASESPECIFIC 이고 데이터베이스 모드가 ANSI 모드인 경우
Teradata
쿼리
 SELECT *
FROM employees
WHERE first_name IN ('GEORGE   ');
Copy
출력

employee_id

first_name

last_name

department

6

GEORGE

영업

7

GEORGE

영업

Snowflake
쿼리
 SELECT *
FROM employees
WHERE RTRIM(first_name) IN (RTRIM('GEORGE   '));
Copy
출력

employee_id

first_name

last_name

department

6

GEORGE

영업

7

GEORGE

영업

케이스 2: 열 제약 조건이 CASESPECIFIC 이고 데이터베이스 모드가 ANSI 모드인 경우
Teradata
쿼리
 SELECT *
FROM employees
WHERE department IN ('SaleS');
Copy
출력

employee_id

first_name

last_name

department

5

Mary

SaleS

Snowflake
쿼리
 SELECT *
FROM employees
WHERE RTRIM(department) IN (RTRIM('SaleS'));
Copy
출력

employee_id

first_name

last_name

department

5

Mary

SaleS

ORDER BY 절

참고

이 기능적 동등성은 다를 수 있다는 점에 유의하십시오.

케이스 1: 열 제약 조건이 NOT CASESPECIFIC 이고 데이터베이스 모드가 ANSI 모드인 경우
Teradata
쿼리
 SELECT department_name
FROM departments
ORDER BY department_name;
Copy
출력

department

EngineerinG

Engineering

Finance

인적 리소스

IT

SalEs

SaleS

Sales

영업

영업

Snowflake

참고

FDM 을 검토하십시오. 데이터 삽입 순서에 따라 순서가 달라집니다.

쿼리
 SELECT
   department_name
FROM
   departments
ORDER BY
   UPPER(department_name);
Copy
출력

department

EngineerinG

Engineering

Finance

인적 리소스

IT

SalEs

SaleS

Sales

영업

영업

케이스 2: 열 제약 조건이 CASESPECIFIC 이고 데이터베이스 모드가 ANSI 모드인 경우
Teradata
쿼리
 SELECT last_name
FROM employees
ORDER BY last_name;
Copy
출력

department

Finance

인적 리소스

Information Technology

Sales

Snowflake
쿼리
 SELECT last_name
FROM employees
ORDER BY last_name;
Copy
출력

department

Finance

인적 리소스

Information Technology

Sales

GROUP BY 절

경고

기능적 동등성을 보장하기 위해 COLLATE 식을 사용해야 합니다.

자세한 내용은 SSC-EWI-TD0007을 참조하세요.

케이스 1: 열 제약 조건이 NOT CASESPECIFIC 이고 데이터베이스 모드가 ANSI 모드인 경우
Teradata
쿼리
 SELECT first_name
FROM employees
GROUP BY first_name;
Copy
출력

first_name

Mary

GeorgE

WIlle

John

Marco

GEORGE

Snowflake
쿼리
 SELECT
   first_name
FROM
   employees
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0007 - GROUP BY IS NOT EQUIVALENT IN TERADATA MODE ***/!!!
GROUP BY first_name;
Copy
출력

FIRST_NAME

George

John

WIlle

Marco

Mary

GEORGE

GEORGE

GeorgE

JOHN

JOHN

케이스 2: 열 제약 조건이 CASESPECIFIC 이고 데이터베이스 모드가 ANSI 모드인 경우
Teradata
쿼리
 SELECT last_name
FROM employees
GROUP BY last_name;
Copy
출력

last_name

SnoW

SNOW

SnoW

Snow

snow

Snowflake
쿼리
 SELECT
   last_name
FROM
   employees
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0007 - GROUP BY IS NOT EQUIVALENT IN TERADATA MODE ***/!!!
GROUP BY last_name;
Copy
출력

last_name

SnoW

SNOW

SnoW

Snow

snow

HAVING 절

HAVING 절은 다음에서 이 패턴을 사용합니다.

  • 평가 연산.

    • 예: =, !=, <, >.

  • LIKE 작업.

  • IN 작업.

  • CAST 를 평가 연산으로

  • CAST 를 LIKE 연산으로

다음 샘플은 평가 작업이 포함된 패턴을 보여줍니다.

샘플: 열 제약 조건은 NOT CASESPECIFIC , 데이터베이스 모드는 ANSI 모드입니다
Teradata
쿼리
 SELECT first_name
FROM employees
GROUP BY first_name
HAVING first_name = 'GEORGE';
Copy
출력
GEORGE   

Copy
Snowflake
쿼리
 SELECT
   first_name
FROM
   employees
GROUP BY first_name
HAVING
   RTRIM(first_name) = RTRIM('GEORGE');
Copy
출력
GEORGE

Copy

CASE WHEN 문

CASE WHEN 문은 설명된 패턴을 사용합니다.

  • 평가 연산.

    • 예: =, !=, <, >.

  • LIKE 작업.

  • IN 작업.

  • CAST 를 평가 연산으로

  • CAST 를 LIKE 연산으로

다음 샘플은 평가 작업이 포함된 패턴을 보여줍니다.

Teradata
쿼리
 SELECT first_name,
      last_name,
      CASE
          WHEN department = 'SaleS  ' THEN 'GLOBAL SALES'
          WHEN first_name = 'GEORGE   ' THEN 'Department Full Name'
          ELSE 'Other'
      END AS department_full_name
FROM employees
WHERE last_name = '   ';
Copy
출력
first_namelast_namedepartment_full_name
GEORGEDepartment Full Name
MaryGLOBAL SALES
GeorgE Other
GEORGEDepartment Full Name
Snowflake
쿼리
 SELECT
      first_name,
      last_name,
      CASE
            WHEN UPPER(RTRIM(department)) = UPPER(RTRIM('SaleS  '))
                  THEN 'GLOBAL SALES'
            WHEN UPPER(RTRIM(first_name)) = UPPER(RTRIM('GEORGE   '))
                  THEN 'Department Full Name'
          ELSE 'Other'
      END AS department_full_name
FROM
      employees
WHERE
      UPPER(RTRIM( last_name)) = UPPER(RTRIM('   '));
Copy
출력
first_namelast_namedepartment_full_name
GEORGEDepartment Full Name
MaryGLOBAL SALES
GeorgE Other
GEORGEDepartment Full Name

JOIN 절

경고

간단한 시나리오가 지원됩니다.

JOIN 문은 설명된 패턴을 사용합니다.

  • 평가 연산.

    • 예: =, !=, <, >.

  • LIKE 작업.

  • IN 작업.

  • CAST 를 평가 연산으로

  • CAST 를 LIKE 연산으로

다음 샘플은 평가 작업이 포함된 패턴을 보여줍니다.

샘플: 열 제약 조건은 CASESPECIFIC, 데이터베이스 모드는 ANSI 모드입니다
Teradata
쿼리
 SELECT
    e.employee_id,
    e.first_name,
    e.last_name,
    d.department_name
FROM
    employees e
JOIN
    departments d
ON
    e.department = d.department_name;
Copy
출력

employee_id

first_name

last_name

department_name

1

George

Snow

Sales

10

JOHN

snow

Finance

Snowflake
쿼리
 SELECT
   e.employee_id,
   e.first_name,
   e.last_name,
   d.department_name
FROM
   employees e
JOIN
      departments d
ON RTRIM(e.department) = RTRIM(d.department_name);
Copy
출력

employee_id

first_name

last_name

department_name

1

George

Snow

Sales

10

JOHN

snow

Finance

관련 EWIs

SSC-EWI-TD0007: GROUP BY IS NOT EQUIVALENT IN TERADATA MODE

문자열 비교를 위한 TERA 모드 - COLLATE

이 섹션에서는 COLLATE를 사용하여 Tera 모드의 문자열에 대한 변환 사양을 정의합니다.

설명

문자열 비교 및 COLLATE 사용을 위한 Tera 모드

Tera Mode 문자열 비교는 필수에 따라 열 또는 문에 COLLATE 제약 조건을 적용합니다. 기본 대/소문자 사양 트림 동작을 고려할 수 있습니다. TERA 모드에 대한 Teradata의 기본 대/소문자 사양은 NOT CASESPECIFIC 입니다. 따라서 대/소문자 지정이 없는 열에는 COLLATE('en-ci') 제약 조건이 적용됩니다.

샘플 소스 패턴

설정 데이터

Teradata
 CREATE TABLE employees (
    employee_id INTEGER NOT NULL,
    first_name VARCHAR(50) NOT CASESPECIFIC,
    last_name VARCHAR(50) CASESPECIFIC,
    department VARCHAR(50)
);

INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (1, 'George', 'Snow', 'Sales');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (2, 'John', 'SNOW', 'Engineering');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (3, 'WIlle', 'SNOW', 'Human resources   ');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (4, 'Marco', 'SnoW   ', 'EngineerinG');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (5, 'Mary', '   ', 'SaleS  ');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (6, 'GEORGE', '  ', 'sales  ');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (7, 'GEORGE   ', '  ', 'salEs  ');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (8, '    GeorgE   ', '  ', 'SalEs  ');
INSERT INTO employees (employee_id, first_name, last_name, department) VALUES (9, 'JOHN', '   SnoW', 'IT');
INSERT INTO employees (employee_id, first_name, last_name, department) VALUES (10, 'JOHN    ', 'snow', 'Finance   ');

CREATE TABLE departments (
    department_id INTEGER NOT NULL,
    department_name VARCHAR(50) NOT CASESPECIFIC,
    location VARCHAR(100) CASESPECIFIC,
    PRIMARY KEY (department_id)
);


INSERT INTO departments (department_id, department_name, location) VALUES (101, 'Information Technology', 'New York');
INSERT INTO departments (department_id, department_name, location) VALUES (102, 'Human Resources', 'Chicago');
INSERT INTO departments (department_id, department_name, location) VALUES (103, 'Sales', 'San Francisco');
INSERT INTO departments (department_id, department_name, location) VALUES (104, 'Finance', 'Boston');
Copy
Snowflake
 CREATE OR REPLACE TABLE employees (
    employee_id INTEGER NOT NULL,
    first_name VARCHAR(50) COLLATE 'en-ci',
    last_name VARCHAR(50),
    department VARCHAR(50) COLLATE 'en-ci'
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "11/01/2024",  "domain": "test" }}'
;

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (1, 'George', 'Snow', 'Sales');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (2, 'John', 'SNOW', 'Engineering');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (3, 'WIlle', 'SNOW', 'Human resources   ');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (4, 'Marco', 'SnoW   ', 'EngineerinG');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (5, 'Mary', '   ', 'SaleS  ');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (6, 'GEORGE', '  ', 'sales  ');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (7, 'GEORGE   ', '  ', 'salEs  ');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (8, '    GeorgE   ', '  ', 'SalEs  ');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (9, 'JOHN', '   SnoW', 'IT');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (10, 'JOHN    ', 'snow', 'Finance   ');

CREATE OR REPLACE TABLE departments (
    department_id INTEGER NOT NULL,
    department_name VARCHAR(50) COLLATE 'en-ci',
    location VARCHAR(100),
       PRIMARY KEY (department_id)
   )
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "11/01/2024",  "domain": "test" }}'
;

INSERT INTO departments (department_id, department_name, location)
VALUES (101, 'Information Technology', 'New York');

INSERT INTO departments (department_id, department_name, location)
VALUES (102, 'Human Resources', 'Chicago');

INSERT INTO departments (department_id, department_name, location)
VALUES (103, 'Sales', 'San Francisco');

INSERT INTO departments (department_id, department_name, location)
VALUES (104, 'Finance', 'Boston');
Copy

비교 연산

케이스 1: 열 제약 조건이 NOT CASESPECIFIC 이고 데이터베이스 모드가 TERA 모드인 경우
Teradata
쿼리
 SELECT *
FROM employees
WHERE first_name = 'GEorge ';
Copy
출력

employee_id

first_name

last_name

department

7

GEORGE

영업

1

George

Snow

Sales

6

GEORGE

영업

Snowflake
쿼리
 SELECT
 *
FROM
 employees
WHERE
 RTRIM(first_name) = RTRIM('GEorge ');
Copy
출력

employee_id

first_name

last_name

department

7

GEORGE

영업

1

George

Snow

Sales

6

GEORGE

영업

케이스 2: 열 제약 조건이 CASESPECIFIC 이고 데이터베이스 모드가 TERA 모드인 경우
Teradata
쿼리
 SELECT *
FROM employees
WHERE last_name = 'SNOW ';
Copy
출력

employee_id

first_name

last_name

department

3

WIlle

SNOW

인적 리소스

2

John

SNOW

Engineering

Snowflake
쿼리
SELECT
 *
FROM
 employees
WHERE
 RTRIM(last_name) = RTRIM('SNOW ');
Copy
출력

employee_id

first_name

last_name

department

3

WIlle

SNOW

인적 리소스

2

John

SNOW

Engineering

케이스 3: CAST NOT CASESPECIFIC 열을 CASESPECIFIC 으로, 데이터베이스 모드는 TERA 모드

참고

다음 쿼리에 유의하십시오

  • SELECT * FROM employees WHERE first_name = 'JOHN ' (CASESPECIFIC)

  • SELECT * FROM employees WHERE first_name (CASESPECIFIC) = 'JOHN '

는 동일한 값을 반환합니다.

Teradata
쿼리
 SELECT * FROM employees WHERE first_name = 'JOHN   ' (CASESPECIFIC);
Copy
출력

employee_id

first_name

last_name

department

9

JOHN

SnoW

IT

10

JOHN

snow

Finance

Snowflake
쿼리
 SELECT
    *
FROM
    employees
WHERE 
    COLLATE(first_name, 'en-cs-rtrim') = 'JOHN   ' /*** SSC-FDM-TD0032 - CASESPECIFIC CLAUSE WAS REMOVED ***/;
Copy
출력

employee_id

first_name

last_name

department

9

JOHN

SnoW

IT

10

JOHN

snow

Finance

케이스 4: CAST CASESPECIFIC 열을 NOT CASESPECIFIC 으로, 데이터베이스 모드는 TERA 모드

참고

비교의 왼쪽의 열에 있는 CAST 가 우선순위를 갖습니다.

\ 예를 들어:

  • SELECT * FROM employees WHERE last_name (NOT CASESPECIFIC) = 'snoW'; _는 5개 행을 반환합니다. _

  • SELECT * FROM employees WHERE last_name = 'snoW' (NOT CASESPECIFIC); 은 이 설정 데이터로 0개 행 을 반환합니다.

Teradata
쿼리
 SELECT * FROM employees WHERE last_name (NOT CASESPECIFIC)  = 'snoW' ;
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

2

John

SNOW

Engineering

3

WIlle

SNOW

인적 리소스

4

Marco

SnoW

EngineerinG

10

JOHN

snow

Finance

Snowflake
쿼리
 SELECT
   *
FROM
   employees
WHERE
   COLLATE(last_name /*** SSC-FDM-TD0032 - NOT CASESPECIFIC CLAUSE WAS REMOVED ***/, 'en-ci-rtrim') = 'snoW' ;
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

2

John

SNOW

Engineering

3

WIlle

SNOW

인적 리소스

4

Marco

SnoW

EngineerinG

10

JOHN

snow

Finance

LIKE 작업

케이스 1: 열 제약 조건이 NOT CASESPECIFIC 이고 데이터베이스 모드가 TERA 모드인 경우
Teradata
쿼리
 SELECT *
FROM employees
WHERE first_name LIKE 'GeorgE';
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

6

GEORGE

영업

Snowflake
쿼리
 SELECT
   *
FROM
   employees
WHERE
   RTRIM(first_name) LIKE RTRIM('GeorgE');
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

6

GEORGE

영업

케이스 2: 열 제약 조건이 CASESPECIFIC 이고 데이터베이스 모드가 TERA 모드인 경우
Teradata
쿼리
 SELECT *
FROM employees
WHERE last_name LIKE 'Snow';
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

Snowflake
쿼리
 SELECT
   *
FROM
   employees
WHERE
   RTRIM(last_name) LIKE RTRIM('Snow');
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

케이스 3: CAST NOT CASESPECIFIC 열을 CASESPECIFIC 으로, 데이터베이스 모드는 TERA 모드
Teradata
쿼리
 SELECT *
FROM employees
WHERE first_name LIKE 'George' (CASESPECIFIC);
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

Snowflake
쿼리
 SELECT
    *
FROM
    employees
WHERE
    COLLATE(first_name, 'en-cs-rtrim') LIKE 'George';
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

케이스 4: CAST CASESPECIFIC 열을 NOT CASESPECIFIC 으로, 데이터베이스 모드는 TERA 모드
Teradata
쿼리
 SELECT *
FROM employees
WHERE last_name LIKE 'SNO%' (NOT CASESPECIFIC);
Copy
출력

employee_id

first_name

last_name

department

3

WIlle

SNOW

인적 리소스

2

John

SNOW

Engineering

Snowflake
쿼리
 SELECT
   *
FROM
   employees
WHERE
   RTRIM(last_name) LIKE RTRIM('SNO%' /*** SSC-FDM-TD0032 - NOT CASESPECIFIC CLAUSE WAS REMOVED ***/);
Copy
출력

employee_id

first_name

last_name

department

3

WIlle

SNOW

인적 리소스

2

John

SNOW

Engineering

IN 작업

케이스 1: 열 제약 조건이 NOT CASESPECIFIC 이고 데이터베이스 모드가 TERA 모드인 경우
Teradata
쿼리
 SELECT *
FROM employees
WHERE first_name IN ('George   ');
Copy
출력

employee_id

first_name

last_name

department

7

GEORGE

영업

1

George

Snow

Sales

6

GEORGE

영업

Snowflake
쿼리
 SELECT
   *
FROM
   employees
WHERE
   RTRIM(first_name) IN (RTRIM('George   '));
Copy
출력

employee_id

first_name

last_name

department

7

GEORGE

영업

1

George

Snow

Sales

6

GEORGE

영업

케이스 2: 열 제약 조건이 정의되지 않았고 데이터베이스 모드가 TERA 모드인 경우

참고

Tera 모드에서 정의되지 않은 대/소문자 사양은 NOT CASESPECIFIC 을 의미합니다.

Teradata
쿼리
 SELECT *
FROM employees
WHERE department IN ('Sales    ');
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

5

Mary

SaleS

6

GEORGE

영업

7

GEORGE

영업

8

GeorgE

SalEs

Snowflake
쿼리
 SELECT
   *
FROM
   employees
WHERE
   RTRIM(department) IN (RTRIM('Sales    '));
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

5

Mary

SaleS

6

GEORGE

영업

7

GEORGE

영업

8

GeorgE

SalEs

케이스 3: 열 제약 조건이 CASESPECIFIC 이고 데이터베이스 모드가 TERA 모드인 경우
Teradata
쿼리
 SELECT *
FROM employees
WHERE last_name IN ('SNOW   ');
Copy
출력

employee_id

first_name

last_name

department

3

WIlle

SNOW

인적 리소스

2

John

SNOW

Engineering

Snowflake
쿼리
 SELECT
   *
FROM
   employees
WHERE
   RTRIM(last_name) IN (RTRIM('SNOW   '));
Copy
출력

employee_id

first_name

last_name

department

3

WIlle

SNOW

인적 리소스

2

John

SNOW

Engineering

ORDER BY 절

케이스 1: 열 제약 조건이 NOT CASESPECIFIC 이고 데이터베이스 모드가 TERA 모드인 경우
Teradata
쿼리
 SELECT employee_id, first_name
FROM employees
ORDER BY employee_id, first_name;
Copy
출력
employee_idfirst_name
1George
2John
3WIlle
4Marco
5Mary
6GEORGE
7GEORGE
8 GeorgE
9JOHN
10JOHN
Snowflake
쿼리
 SELECT employee_id, first_name
FROM employees
ORDER BY employee_id, first_name;
Copy
출력
employee_idfirst_name
1George
2John
3WIlle
4Marco
5Mary
6GEORGE
7GEORGE
8 GeorgE
9JOHN
10JOHN
케이스 2: 열 제약 조건이 CASESPECIFIC 이고 데이터베이스 모드가 TERA 모드인 경우
Teradata
쿼리
 SELECT employee_id, last_name
FROM employees
ORDER BY employee_id, last_name;
Copy
출력
employee_idlast_name
1Snow
2SNOW
3SNOW
4SnoW
5
6
7
8
9SnoW
10snow
Snowflake
쿼리
 SELECT employee_id, last_name
FROM employees
ORDER BY employee_id, last_name;
Copy
출력
employee_idlast_name
1Snow
2SNOW
3SNOW
4SnoW
5
6
7
8
9SnoW
10snow

GROUP BY 절

케이스 1: 열 제약 조건이 NOT CASESPECIFIC 이고 데이터베이스 모드가 TERA 모드인 경우
Teradata
쿼리
 SELECT first_name
FROM employees
GROUP BY first_name;
Copy
출력

first_name

Mary

GeorgE

WIlle

JOHN

Marco

GEORGE

Snowflake

경고

출력의 대/소문자 지정은 선택한 열 수에 따라 달라질 수 있습니다.

쿼리
 SELECT
   first_name
FROM
   employees
GROUP BY first_name;
Copy
출력

first_name

John

Marco

George

GeorgE

WIlle

Mary

케이스 2: 열 제약 조건이 CASESPECIFIC 이고 데이터베이스 모드가 TERA 모드인 경우
Teradata
쿼리
 SELECT last_name
FROM employees
GROUP BY last_name;
Copy
출력

last_name

SnoW

SNOW

SnoW

Snow

snow

Snowflake
쿼리
 SELECT
   last_name
FROM
   employees
GROUP BY last_name;
Copy
출력

last_name

SnoW

SNOW

SnoW

Snow

snow

HAVING 절

HAVING 절은 다음에서 이 패턴을 사용합니다.

  • 평가 연산.

    • 예: =, !=, <, >.

  • LIKE 작업.

  • IN 작업.

  • CAST 를 평가 연산으로

  • CAST 를 LIKE 연산으로

다음 샘플은 평가 작업이 포함된 패턴을 보여줍니다.

샘플: 열 제약 조건은 NOT CASESPECIFIC , 데이터베이스 모드는 TERA 모드입니다
Teradata

참고

출력의 대/소문자 지정은 선택한 열 수에 따라 달라질 수 있습니다. 이는 GROUP BY 절과도 관련이 있습니다.

쿼리
 SELECT first_name
FROM employees
GROUP BY first_name
HAVING first_name = 'George  ';
Copy
출력
employee_idfirst_name
7GEORGE
1George
6GEORGE
Snowflake
쿼리
 SELECT
  employee_id,
  first_name
FROM
  employees
GROUP BY employee_id, first_name
HAVING
   RTRIM(first_name) = RTRIM('George  ');
Copy
출력
employee_idfirst_name
7GEORGE
1George
6GEORGE

CASE WHEN 문

CASE WHEN 문은 설명된 패턴을 사용합니다.

  • 평가 연산.

    • 예: =, !=, <, >.

  • LIKE 작업.

  • IN 작업.

  • CAST 를 평가 연산으로

  • CAST 를 LIKE 연산으로

다음 샘플은 평가 작업이 포함된 패턴을 보여줍니다.

Teradata
쿼리
 SELECT first_name,
      last_name,
      CASE
          WHEN department = 'Engineering' THEN 'Information Technology'
          WHEN first_name = 'GeorgE' THEN 'GLOBAL SALES'
          ELSE 'Other'
      END AS department_full_name
FROM employees
WHERE last_name = '';
Copy
출력

first_name

last_name

department_full_name

GEORGE

GLOBAL SALES

Mary

기타

GeorgE

기타

GEORGE

GLOBAL SALES

Snowflake
쿼리
 SELECT
   first_name,
   last_name,
   CASE
      WHEN RTRIM(department) = RTRIM('Engineering')
         THEN 'Information Technology'
      WHEN RTRIM(first_name) = RTRIM('GeorgE')
         THEN 'GLOBAL SALES'
      ELSE 'Other'
   END AS department_full_name
FROM
   employees
WHERE
   RTRIM( last_name) = RTRIM('');
Copy
출력

first_name

last_name

department_full_name

GEORGE

GLOBAL SALES

Mary

기타

GeorgE

기타

GEORGE

GLOBAL SALES

JOIN 절

경고

평가 작업이 포함된 간단한 시나리오가 지원됩니다.

JOIN 문은 설명된 패턴을 사용합니다.

  • EvaluaComparisonComparisontion 작업.

    • 예: =, !=, <, >.

  • LIKE 작업.

  • IN 작업.

  • CAST 를 평가 연산으로

  • CAST 를 LIKE 연산으로

다음 샘플은 평가 작업이 포함된 패턴을 보여줍니다.

샘플: 열 제약 조건은 NOT CASESPECIFIC , 데이터베이스 모드는 TERA 모드입니다
Teradata
쿼리
 SELECT
    e.employee_id,
    e.first_name,
    e.last_name,
    d.department_name
FROM
    employees e
JOIN
    departments d
ON
    e.department = d.department_name;
Copy
출력

employee_id

first_name

last_name

department_name

1

George

Snow

Sales

3

WIlle

SNOW

인적 리소스

5

Mary

Sales

6

GEORGE

Sales

7

GEORGE

Sales

8

GeorgE

Sales

10

JOHN

snow

Finance

Snowflake
쿼리
 SELECT
   e.employee_id,
   e.first_name,
   e.last_name,
   d.department_name
FROM
   employees e
JOIN
   departments d
ON RTRIM(e.department) = RTRIM(d.department_name);
Copy
출력

employee_id

first_name

last_name

department_name

1

George

Snow

Sales

3

WIlle

SNOW

인적 리소스

5

Mary

Sales

6

GEORGE

Sales

7

GEORGE

Sales

8

GeorgE

Sales

10

JOHN

snow

Finance

관련 EWIs

SSC-EWI-TD0007: GROUP BY REQUIRED COLLATE FOR CASE INSENSITIVE COLUMNS

SC-FDM-TD0032 : [NOT] 특정 절이 제거되었습니다.

문자열 비교를 위한 TERA 모드 - NO COLLATE

이 섹션에서는 COLLATE를 사용하지 않고 Tera 모드의 문자열에 대한 변환 사양을 정의합니다.

설명

문자열 비교 및 NO COLLATE 사용을 위한 Tera 모드.

COLLATE 를 사용하지 않는 Tera 모드 문자열 비교는 필요에 따라 RTRIM UPPER` 를 적용합니다. 기본 대/소문자 사양 트림 동작을 고려할 수 있습니다.

샘플 소스 패턴

설정 데이터

Teradata
 CREATE TABLE employees (
    employee_id INTEGER NOT NULL,
    first_name VARCHAR(50) NOT CASESPECIFIC,
    last_name VARCHAR(50) CASESPECIFIC,
    department VARCHAR(50)
);

INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (1, 'George', 'Snow', 'Sales');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (2, 'John', 'SNOW', 'Engineering');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (3, 'WIlle', 'SNOW', 'Human resources   ');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (4, 'Marco', 'SnoW   ', 'EngineerinG');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (5, 'Mary', '   ', 'SaleS  ');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (6, 'GEORGE', '  ', 'sales  ');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (7, 'GEORGE   ', '  ', 'salEs  ');
INSERT INTO employees(employee_id, first_name, last_name, department) VALUES (8, '    GeorgE   ', '  ', 'SalEs  ');
INSERT INTO employees (employee_id, first_name, last_name, department) VALUES (9, 'JOHN', '   SnoW', 'IT');
INSERT INTO employees (employee_id, first_name, last_name, department) VALUES (10, 'JOHN    ', 'snow', 'Finance   ');

CREATE TABLE departments (
    department_id INTEGER NOT NULL,
    department_name VARCHAR(50) NOT CASESPECIFIC,
    location VARCHAR(100) CASESPECIFIC,
    PRIMARY KEY (department_id)
);


INSERT INTO departments (department_id, department_name, location) VALUES (101, 'Information Technology', 'New York');
INSERT INTO departments (department_id, department_name, location) VALUES (102, 'Human Resources', 'Chicago');
INSERT INTO departments (department_id, department_name, location) VALUES (103, 'Sales', 'San Francisco');
INSERT INTO departments (department_id, department_name, location) VALUES (104, 'Finance', 'Boston');
Copy
Snowflake
 CREATE OR REPLACE TABLE employees (
    employee_id INTEGER NOT NULL,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    department VARCHAR(50)
)
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "10/30/2024",  "domain": "test" }}'
;

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (1, 'George', 'Snow', 'Sales');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (2, 'John', 'SNOW', 'Engineering');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (3, 'WIlle', 'SNOW', 'Human resources   ');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (4, 'Marco', 'SnoW   ', 'EngineerinG');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (5, 'Mary', '   ', 'SaleS  ');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (6, 'GEORGE', '  ', 'sales  ');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (7, 'GEORGE   ', '  ', 'salEs  ');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (8, '    GeorgE   ', '  ', 'SalEs  ');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (9, 'JOHN', '   SnoW', 'IT');

INSERT INTO employees (employee_id, first_name, last_name, department)
VALUES (10, 'JOHN    ', 'snow', 'Finance   ');

CREATE OR REPLACE TABLE departments (
    department_id INTEGER NOT NULL,
    department_name VARCHAR(50),
    location VARCHAR(100),
       PRIMARY KEY (department_id)
   )
COMMENT = '{ "origin": "sf_sc", "name": "snowconvert", "version": {  "major": 0,  "minor": 0,  "patch": "0" }, "attributes": {  "component": "teradata",  "convertedOn": "10/30/2024",  "domain": "test" }}'
;

INSERT INTO departments (department_id, department_name, location)
VALUES (101, 'Information Technology', 'New York');

INSERT INTO departments (department_id, department_name, location)
VALUES (102, 'Human Resources', 'Chicago');

INSERT INTO departments (department_id, department_name, location)
VALUES (103, 'Sales', 'San Francisco');

INSERT INTO departments (department_id, department_name, location)
VALUES (104, 'Finance', 'Boston');
Copy

비교 연산

케이스 1: 열 제약 조건이 NOT CASESPECIFIC 이고 데이터베이스 모드가 TERA 모드인 경우

이 예제는 NOT CASESPECIFIC 으로 설정된 열을 first_name 열로 사용하는 방법을 보여 줍니다. 'GEorge', 문자열을 요청하는 경우에도 대/소문자 사양이 고려되지 않기 때문에 쿼리 실행 시 Teradata에서 결과를 검색합니다.

Snowflake에는 이 시나리오를 에뮬레이션하기 위해 두 가지 함수가 구현되어 있습니다. 이 시나리오에서는 문자열이 대/소문자 구분을 검토하지 않기 때문에 RTRIM(UPPER(string_evaluation)), UPPER 가 필요합니다.

Teradata
쿼리
 SELECT *
FROM employees
WHERE first_name = 'GEorge ';
Copy
출력

employee_id

first_name

last_name

department

7

GEORGE

영업

1

George

Snow

Sales

6

GEORGE

영업

Snowflake
쿼리
 SELECT
 *
FROM
 employees
WHERE
 RTRIM(UPPER(first_name)) = RTRIM(UPPER('GEorge '));
Copy
출력

employee_id

first_name

last_name

department

7

GEORGE

영업

1

George

Snow

Sales

6

GEORGE

영업

케이스 2: 열 제약 조건이 CASESPECIFIC 이고 데이터베이스 모드가 TERA 모드인 경우

이 예의 경우 열 제약 조건은 CASESPECIFIC 이며, ‘Snow’는 ‘SNOW’와 같지 않기 때문에 이 예제에서는 Teradata에서 행을 검색하지 않습니다.

Snowflake에서는 대/소문자 사양이 중요하므로 결과 마이그레이션은 RTRIM 함수의 사용만을 가리킵니다.

Teradata
쿼리
 SELECT *
FROM employees
WHERE last_name = 'SNOW ';
Copy
출력

employee_id

first_name

last_name

department

3

WIlle

SNOW

인적 리소스

2

John

SNOW

Engineering

Snowflake
쿼리
SELECT
 *
FROM
 employees
WHERE
 RTRIM(last_name) = RTRIM('SNOW ');
Copy
출력

employee_id

first_name

last_name

department

3

WIlle

SNOW

인적 리소스

2

John

SNOW

Engineering

케이스 3: CAST CASESPECIFIC 열을 NOT CASESPECIFIC 으로, 데이터베이스 모드는 TERA 모드
Teradata

경고

(CASESPECIFIC)은 테이블 정의에서 열 제약 조건을 재정의합니다.

쿼리
 SELECT * FROM employees WHERE first_name = 'GEORGE   ' (CASESPECIFIC);
Copy
출력

employee_id

first_name

last_name

department

7

GEORGE

영업

6

GEORGE

영업

Snowflake

참고

RTRIM 은 왼쪽에, RTRIM 은 오른쪽에 입력해야 합니다.

쿼리
 SELECT
   * 
FROM
   employees
WHERE
   RTRIM(first_name) = RTRIM('GEORGE   ' /*** SSC-FDM-TD0032 - CASESPECIFIC CLAUSE WAS REMOVED ***/);
Copy
출력

employee_id

first_name

last_name

department

7

GEORGE

영업

6

GEORGE

영업

케이스 4: CAST NOT CASESPECIFIC 열을 NOT CASESPECIFIC 으로, 데이터베이스 모드는 TERA 모드
Teradata
쿼리
 SELECT * FROM employees WHERE first_name = 'GEorge   ' (NOT CASESPECIFIC) ;
Copy
출력

employee_id

first_name

last_name

department

7

GEORGE

영업

1

George

Snow

Sales

6

GEORGE

영업

Snowflake
쿼리
 SELECT
   * 
FROM
   employees
WHERE
   UPPER(RTRIM(first_name)) = UPPER(RTRIM('GEorge   ' /*** SSC-FDM-TD0032 - NOT CASESPECIFIC CLAUSE WAS REMOVED ***/));
Copy
출력

employee_id

first_name

last_name

department

7

GEORGE

영업

1

George

Snow

Sales

6

GEORGE

영업

케이스 5: 공백 케이스. 열 제약 조건은 NOT CASESPECIFIC, 데이터베이스 모드는 TERA 모드이며, 동일 연산을 사용합니다.
Teradata
쿼리
 SELECT *
FROM employees
WHERE last_name = '   ';
Copy
출력

employee_id

first_name

last_name

department

7

GEORGE

영업

5

Mary

SaleS

8

GeorgE

SalEs

6

GEORGE

영업

Snowflake
쿼리
 SELECT
   *
FROM
   employees
WHERE
   RTRIM(last_name) = RTRIM('   ');
Copy
출력

employee_id

first_name

last_name

department

7

GEORGE

영업

5

Mary

SaleS

8

GeorgE

SalEs

6

GEORGE

영업

LIKE 작업

참고

이 작업은 다른 작업과 다르게 작동합니다. 정보를 검색하려면 빈 칸이 같은 수여야 합니다.

케이스 1: 열 제약 조건이 NOT CASESPECIFIC 이고 데이터베이스 모드가 TERA 모드인 경우

이 예제에서는 대/소문자 사양이 관련이 없으므로 한 행이 표시될 것으로 예상됩니다.

참고

Snowflake에서 마이그레이션은 ILIKE 연산을 사용합니다. 대/소문자를 구분하지 않는 비교 성능을 수행합니다.

Teradata
쿼리
 SELECT *
FROM employees
WHERE first_name LIKE 'GeorgE';
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

6

GEORGE

영업

Snowflake
쿼리
 SELECT *
FROM employees
WHERE first_name ILIKE 'GeorgE';
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

6

GEORGE

영업

케이스 2: 열 제약 조건이 CASESPECIFIC 이고 데이터베이스 모드가 TERA 모드인 경우
Teradata
쿼리
 SELECT *
FROM employees
WHERE last_name LIKE 'Snow';
Copy
출력

first_name

last_name

department

George

Snow

Sales

Jonh

Snow

Engineering

Snowflake
쿼리
 SELECT *
FROM employees
WHERE last_name LIKE 'Snow';
Copy
출력

first_name

last_name

department

George

Snow

Sales

Jonh

Snow

Engineering

케이스 3: CAST CASESPECIFIC 열을 NOT CASESPECIFIC 으로, 데이터베이스 모드는 TERA 모드
Teradata
쿼리
 SELECT *
FROM employees
WHERE first_name LIKE 'George' (NOT CASESPECIFIC);
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

6

GEORGE

영업

Snowflake
쿼리
 SELECT
   *
FROM
   employees
WHERE 
   first_name ILIKE 'George' /*** SSC-FDM-TD0032 - NOT CASESPECIFIC CLAUSE WAS REMOVED ***/;
Copy
출력

employee_id

first_name

last_name

department

1

George

Snow

Sales

6

GEORGE

영업

케이스 4: CAST NOT CASESPECIFIC 열을 NOT CASESPECIFIC 으로, 데이터베이스 모드는 ANSI 모드

참고

이 경우 ILIKE 로 변환해야 합니다.

Teradata
쿼리
 SELECT *
FROM employees
WHERE first_name LIKE 'GE%' (NOT CASESPECIFIC);
Copy
출력

employee_id

first_name

last_name

department

7

GEORGE

영업

1

George

Snow

Sales

6

GEORGE

영업

Snowflake
쿼리
 SELECT
   *
FROM
   employees
WHERE
   first_name ILIKE 'GE%' /*** SSC-FDM-TD0032 - NOT CASESPECIFIC CLAUSE WAS REMOVED ***/;
Copy
출력

employee_id

first_name

last_name

department

7

GEORGE

영업

1

George

Snow

Sales

6

GEORGE

영업

IN 작업

케이스 1: 열 제약 조건이 NOT CASESPECIFIC 이고 데이터베이스 모드가 TERA 모드인 경우
Teradata
쿼리
 SELECT *
FROM employees
WHERE first_name IN ('GeorgE');
Copy
출력

employee_id

first_name

last_name

department

7

GEORGE

영업

1

George

Snow

Sales

6

GEORGE

영업

Snowflake
쿼리
 SELECT *
FROM employees
WHERE RTRIM(UPPER(first_name)) IN (RTRIM(UPPER('GeorgE')));
Copy
출력

employee_id

first_name

last_name

department

7

GEORGE

영업

1

George

Snow

Sales

6

GEORGE

영업

케이스 2: 열 제약 조건이 CASESPECIFIC 이고 데이터베이스 모드가 TERA 모드인 경우

이 예제에서는 Teradata 데이터베이스에서 대/소문자 사양이 결과와 관련이 있으므로 UPPER 함수를 사용할 필요가 없습니다.

Teradata
쿼리
 SELECT *
FROM employees
WHERE last_name IN ('SnoW');
Copy
출력

employee_id

first_name

last_name

department

4

Marco

SnoW

EngineerinG

Snowflake
쿼리
 SELECT *
FROM employees
WHERE RTRIM(last_name) IN (RTRIM('SnoW'));
Copy
출력

employee_id

first_name

last_name

department

4

Marco

SnoW

EngineerinG

ORDER BY 절

케이스 1: 열 제약 조건이 NOT CASESPECIFIC 이고 데이터베이스 모드가 TERA 모드인 경우

위험

이 출력 순서는 다를 수 있습니다.

Teradata
쿼리
 SELECT department
FROM employees
ORDER BY department;
Copy
출력

department

EngineerinG

Engineering

Finance

인적 리소스

IT

영업

SalEs

Sales

SaleS

영업

Snowflake
쿼리
 SELECT department
FROM employees
ORDER BY UPPER(department);
Copy
출력

department

EngineerinG

Engineering

Finance

인적 리소스

IT

영업

SalEs

Sales

SaleS

영업

케이스 2: 열 제약 조건이 CASESPECIFIC 이고 데이터베이스 모드가 TERA 모드인 경우

위험

이 출력은 순서가 다를 수 있습니다.

Teradata
쿼리
 SELECT last_name
FROM employees
ORDER BY last_name;
Copy
출력

last_name

SnoW

SNOW

SNOW

SnoW

Snow

snow

Snowflake
쿼리
 SELECT last_name
FROM employees
ORDER BY last_name;
Copy
출력

last_name

SnoW

SNOW

SNOW

SnoW

Snow

snow

GROUP BY 절

경고

이 출력은 다를 수 있습니다. 기능적 동등성을 보장하기 위해 COLLATE 식을 사용해야 합니다.

자세한 내용은 SSC-EWI-TD0007 을 참조하십시오.

다음은 collate 를 사용하지 않는 해결 방법입니다.

SELECT RTRIM(UPPER(first_name))

FROM employees

GROUP BY RTRIM(UPPER(first_name));

열 동작 정보

위험

Snowflake의 데이터 삽입을 검토하십시오. Snowflake는 대소문자 사양이 열에 명시적으로 바인딩되어 있지 않기 때문에 ‘GEORGE’ 및 ‘georges’ 같은 값을 오류 없이 삽입할 수 있습니다.

다음과 같은 테이블과 데이터가 있다고 가정합니다.

 CREATE TABLE students (
   first_name VARCHAR(50) NOT CASESPECIFIC
);

INSERT INTO students(first_name) VALUES ('George');
INSERT INTO students(first_name) VALUES ('   George');
Copy

이 샘플에서는 NOT CASESPECIFIC 열에 대문자와 소문자가 포함된 값을 동일한 값으로 간주하므로 대문자와 소문자가 포함된 값을 삽입할 수 없습니다. 이 열은 대/소문자 구분을 감독하지 않으므로 ‘GEORGE’ 및 ‘george’ 값이 동일한 정보로 확인됩니다.

다음 행은 _ 중복 행 오류 _로 간주됩니다.

 INSERT INTO students(first_name) VALUES ('GEORGE');
INSERT INTO students(first_name) VALUES ('GeorGe');
INSERT INTO students(first_name) VALUES ('George  ');
INSERT INTO students(first_name) VALUES ('GeOrge');
INSERT INTO students(first_name) VALUES ('GEorge');
INSERT INTO students(first_name) VALUES ('George');
Copy
케이스 1: 열 제약 조건이 NOT CASESPECIFIC 이고 데이터베이스 모드가 TERA 모드인 경우
Teradata
쿼리
 SELECT first_name
FROM employees
GROUP BY first_name;
Copy
출력

first_name

Mary

GeorgE

WIlle

JOHN

Marco

GEORGE

Snowflake
쿼리
 SELECT
   first_name
FROM
   employees
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0007 - GROUP BY IS NOT EQUIVALENT IN TERADATA MODE ***/!!!
GROUP BY first_name;
Copy
출력

first_name

George

John

WIlle

Marco

Mary

GEORGE

GEORGE

GeorgE

JOHN

JOHN

케이스 2: 열 제약 조건이 CASESPECIFIC 이고 데이터베이스 모드가 TERA 모드인 경우
Teradata
쿼리
 SELECT last_name
FROM employees
GROUP BY last_name;
Copy
출력

last_name

SnoW

SNOW

SnoW

Snow

snow

Snowflake
쿼리
 SELECT
   last_name
FROM
   employees
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0007 - GROUP BY IS NOT EQUIVALENT IN TERADATA MODE ***/!!!
GROUP BY last_name;
Copy
출력

last_name

SnoW

SNOW

SnoW

Snow

snow

HAVING 절

HAVING 절은 다음에서 이 패턴을 사용합니다.

  • 평가 연산.

    • 예: =, !=, <, >.

  • LIKE 작업.

  • IN 작업.

  • CAST 를 평가 연산으로

  • CAST 를 LIKE 연산으로

다음 샘플은 평가 작업이 포함된 패턴을 보여줍니다.

샘플: 열 제약 조건은 CASESPECIFIC, 데이터베이스 모드는 TERA 모드입니다
Teradata
쿼리
 SELECT last_name
FROM employees
GROUP BY last_name
HAVING last_name = 'Snow';
Copy
출력

last_name

Snow

Snowflake
쿼리
 SELECT last_name
FROM employees
GROUP BY last_name
HAVING RTRIM(last_name) = RTRIM('Snow');
Copy
출력

last_name

Snow

CASE WHEN 문

CASE WHEN 문은 설명된 패턴을 사용합니다.

  • 평가 연산.

    • 예: =, !=, <, >.

  • LIKE 작업.

  • IN 작업.

  • CAST 를 평가 연산으로

  • CAST 를 LIKE 연산으로

다음 샘플은 평가 작업이 포함된 패턴을 보여줍니다.

Teradata
쿼리
 SELECT first_name,
      last_name,
      CASE
          WHEN department = 'EngineerinG' THEN 'Information Technology'
          WHEN last_name = 'SNOW' THEN 'GLOBAL COOL SALES'
          ELSE 'Other'
      END AS department_full_name
FROM employees;
Copy
출력

first_name

last_name

department_full_name

GEORGE

기타

JOHN

SnoW

기타

Mary

기타

JOHN

snow

기타

WIlle

SNOW

GLOBAL COOL SALES

George

Snow

기타

GeorgE

기타

GEORGE

기타

Marco

SnoW

Information Technology

John

SNOW

Information Technology

Snowflake
쿼리
 SELECT
   first_name,
   last_name,
   CASE
      WHEN UPPER(RTRIM(department)) = UPPER(RTRIM('EngineerinG'))
         THEN 'Information Technology'
      WHEN RTRIM(last_name) = RTRIM('SNOW')
         THEN 'GLOBAL COOL SALES'
      ELSE 'Other'
   END AS department_full_name
FROM
   employees;
Copy
출력

first_name

last_name

department_full_name

GEORGE

기타

JOHN

SnoW

기타

Mary

기타

JOHN

snow

기타

WIlle

SNOW

GLOBAL COOL SALES

George

Snow

기타

GeorgE

기타

GEORGE

기타

Marco

SnoW

Information Technology

John

SNOW

Information Technology

JOIN 절

경고

간단한 시나리오가 지원됩니다.

JOIN 문은 설명된 패턴을 사용합니다.

  • 평가 연산.

    • 예: =, !=, <, >.

  • LIKE 작업.

  • IN 작업.

  • CAST 를 평가 연산으로

  • CAST 를 LIKE 연산으로

다음 샘플은 평가 작업이 포함된 패턴을 보여줍니다.

샘플: 열 제약 조건은 NOT CASESPECIFIC , 데이터베이스 모드는 TERA 모드입니다
Teradata
쿼리
 SELECT
    e.employee_id,
    e.first_name,
    e.last_name,
    d.department_name
FROM
    employees e
JOIN
    departments d
ON
    e.department = d.department_name;
Copy
출력
employee_idfirst_namelast_namedepartment_name
1GeorgeSnowSales
3WIlleSNOWHuman Resources
5MarySales
6GEORGESales
7GEORGESales
8 GeorgE Sales
10JOHNsnowFinance
Snowflake
쿼리
 SELECT
   e.employee_id,
   e.first_name,
   e.last_name,
   d.department_name
FROM
   employees e
JOIN
   departments d
ON UPPER(RTRIM(e.department)) = UPPER(RTRIM(d.department_name));
Copy
출력
employee_idfirst_namelast_namedepartment_name
1GeorgeSnowSales
3WIlleSNOWHuman Resources
5MarySales
6GEORGESales
7GEORGESales
8 GeorgE Sales
10JOHNsnowFinance

Known Issues

  1. 몇 가지 모드별 SQL 문 제한 사항: BEGIN TRANSACTION, END TRANSACTION, COMMIT [WORK].

  2. 대/소문자 사양이 열 선언에 바인딩되지 않기 때문에 데이터 삽입은 Snowflake에서 다를 수 있습니다.

  3. GROUP BY 의 순서는 다를 수 있지만 올바른 값을 그룹화합니다.

  4. ORDER BY 는 Snowflake에서 다르게 동작합니다.

  5. 함수에 소스 코드의 TRIM()가 있는 경우 이 해결 방법은 소스 코드에 필수 함수를 추가합니다. 따라서 TRIM() 소스 함수에 RTRIM 을 적용합니다.

관련 EWIs

SSC-EWI-TD0007: GROUP BY IS NOT EQUIVALENT IN TERADATA MODE