ANSI Mode For Strings Comparison - COLLATE

This section defines the translation specification for a string in ANSI mode with the use of COLLATE.

Important Notice: Migration of Documentation Website

Please be advised that our documentation website is currently undergoing a migration to a new platform. To ensure you have access to the most up-to-date information, we kindly request that you visit our new documentation website located at:

Official Snowflake Snowconvert Documentation

For any immediate assistance or if you encounter any issues, please contact our support team at [email protected].

Thank you for your understanding.

Description

ANSI mode for string comparison and COLLATE usage

The ANSI mode string comparison will apply the COLLATE constraint to the columns or statements as required. The default case specification trim behavior may be taken into account.

Notice that in Teradata, the default case specification is 'CASESPECIFIC', the same default as in Snowflake 'case-sensitive'. Thus, these cases will not be translated with a COLLATE because it will be redundant.

Sample Source Patterns

Setup data

IN -> Teradata_01.sql
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');

Comparison operation

Case 1: Column constraint is NOT CASESPECIFIC and database mode is ANSI Mode

Teradata

Snowflake

Case 2: Column constraint is CASESPECIFIC and database mode is ANSI Mode

Teradata

Snowflake

Case 3: CAST NOT CASESPECIFIC column to CASESPECIFIC and database mode is ANSI Mode

Teradata

Snowflake

COLLATE 'en-cs' is required for functional equivalence.

Case 4: CAST CASESPECIFIC column to NOT CASESPECIFIC and database mode is ANSI Mode

Teradata

Snowflake

Case 5: CAST NOT CASESPECIFIC column to NOT CASESPECIFIC and database mode is ANSI Mode

Teradata

Snowflake

It requires COLLATE.

LIKE operation

Case 1: Column constraint is NOT CASESPECIFIC and database mode is ANSI Mode

Teradata

Snowflake

Case 2: Column constraint is CASESPECIFIC and database mode is ANSI Mode

Teradata

Snowflake

Case 3: CAST NOT CASESPECIFIC column to CASESPECIFIC and database mode is ANSI Mode

Teradata

Snowflake

Case 4: CAST CASESPECIFC column to NOT CASESPECIFIC and database mode is ANSI Mode

Teradata

Snowflake

IN Operation

Case 1: Column constraint is NOT CASESPECIFIC and database mode is ANSI Mode

Teradata

Snowflake

This case requires COLLATE(column_name, 'en-cs-rtrim')

Case 2: Column constraint is CASESPECIFIC and database mode is ANSI Mode

Teradata

For this case, the column does not have a column constraint, but the default constraint in Teradata ANSI mode is CASESPECIFIC.

Snowflake

ORDER BY clause

Case 1: Column constraint is NOT CASESPECIFIC and database mode is ANSI Mode

Teradata

Snowflake

Case 2: Column constraint is CASESPECIFIC and database mode is ANSI Mode

Teradata

Snowflake

GROUP BY clause

Case 1: Column constraint is NOT CASESPECIFIC and database mode is ANSI Mode

Teradata

Snowflake

RTRIM is required in selected columns.

Case 2: Column constraint is CASESPECIFIC and database mode is ANSI Mode

Teradata

Snowflake

The order may differ.

HAVING clause

The HAVING clause will use the patterns in:

  • Evaluation operations.

    • For example: =, !=, <, >.

  • LIKE operation.

  • IN Operation.

  • CAST to evaluation operation.

  • CAST to LIKE operation.

The following sample showcases a pattern with evaluation operation.

Sample: Column constraint is NOT CASESPECIFIC and database mode is ANSI Mode

Teradata

Snowflake

CASE WHEN statement

The CASE WHEN statement will use the patterns described in:

  • Evaluation operations.

    • For example: =, !=, <, >.

  • LIKE operation.

  • IN Operation.

  • CAST to evaluation operation.

  • CAST to LIKE operation.

The following sample showcases a pattern with evaluation operation.

Teradata

Snowflake

JOIN clause

The JOIN statement will use the patterns described in:

  • Evaluation operations.

    • For example: =, !=, <, >.

  • LIKE operation.

  • IN Operation.

  • CAST to evaluation operation.

  • CAST to LIKE operation.

The following sample showcases a pattern with evaluation operation.

Sample: Column constraint is NOT CASESPECIFIC and database mode is ANSI Mode

Teradata

Snowflake

d.department_name is NOT CASESPECIFIC, so it requires COLLATE.

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

SC-FDM-TD0032 : [NOT] CASESPECIFIC CLAUSE WAS REMOVED

Last updated