SnowConvert AI – Teradata – Modos de sessão no Teradata¶
Descrição dos modos de sessão do Teradata¶
O banco de dados do Teradata tem diferentes modos de execução de consultas: modo ANSI (regras baseadas nas especificações ANSI SQL: 2011) e modo TERA (regras definidas pelo Teradata). Para obter mais informações, consulte a seguinte documentação do Teradata.
Modo Teradata para tabela informativa de cadeias de caracteres¶
Para cadeias de caracteres, o Modo Teradata funciona de forma diferente. Conforme explicado na tabela a seguir, com base na documentação do Teradata:
Recurso |
Modo ANSI |
Modo Teradata |
|---|---|---|
Atributo padrão para comparações de caracteres |
CASESPECIFIC |
NOT CASESPECIFIC |
Comportamento TRIM padrão |
TRIM(BOTH FROM) |
TRIM(BOTH FROM) |
Resumo da especificação da conversão¶
| Mode | Column constraint values | Teradata behavior | SC expected behavior |
|---|---|---|---|
| ANSI Mode | CASESPECIFIC | CASESPECIFIC | No constraint added. |
| NOT CASESPECIFIC | CASESPECIFIC | Add COLLATE 'en-cs' in column definition. | |
| Teradata Mode | CASESPECIFIC | CASESPECIFIC | In most cases, do not add COLLATE, and convert its usages of string comparison to RTRIM( expression ) |
| NOT CASESPECIFIC | NOT CASESPECIFIC | In most cases, do not add COLLATE, and convert its usages of string comparison to RTRIM(UPPER( expression )) |
Opções de especificação de conversão disponíveis¶
Modo ANSI para comparação de cadeia de caracteres - COLLATE¶
Esta seção define a especificação de tradução para uma cadeia de caracteres no modo ANSI com o uso de COLLATE.
Descrição ¶
Modo ANSI para comparação de cadeia de caracteres e uso de COLLATE¶
A comparação de cadeia de caracteres no modo ANSI aplicará a restrição COLLATE às colunas ou instruções, conforme necessário. O comportamento de corte da especificação de maiúsculas e minúsculas padrão pode ser levado em consideração.
Observe que, no Teradata, a especificação de maiúsculas e minúsculas padrão é “CASESPECIFIC”, o mesmo padrão que no Snowflake “case-sensitive'. Portanto, esses casos não serão convertidos com um COLLATE porque serão redundantes.
Amostra de padrões de origem ¶
Dados de configuração¶
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');
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');
Operação de comparação¶
Caso 1: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE first_name = 'GEorge ';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
COLLATE(first_name, 'en-cs-rtrim') = RTRIM('George');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
Caso 2: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE last_name = 'SNOW ';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
Engenharia |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
RTRIM(last_name) = RTRIM('SNOW ');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
Engenharia |
Caso 3: Coluna CAST NOT CASESPECIFIC para CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT * FROM employees WHERE first_name = 'George ' (CASESPECIFIC);
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
Snowflake¶
Nota
COLLATE “en-cs” é necessário para a equivalência funcional.
Consulta¶
SELECT
*
FROM
employees
WHERE
COLLATE(first_name, 'en-cs-rtrim') = 'George ' /*** SSC-FDM-TD0032 - CASESPECIFIC CLAUSE WAS REMOVED ***/;
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
Caso 4: Coluna CAST CASESPECIFIC para NOT CASESPECIFIC e o modo do banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT * FROM employees WHERE first_name = 'GEorge ' (NOT CASESPECIFIC) ;
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
|
7 |
GEORGE |
salEs |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
RTRIM(first_name) = RTRIM('GEorge ' /*** SSC-FDM-TD0032 - NOT CASESPECIFIC CLAUSE WAS REMOVED ***/);
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
|
7 |
GEORGE |
salEs |
Caso 5: Coluna CAST NOT CASESPECIFIC para NOT CASESPECIFIC e o modo do banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT * FROM employees WHERE first_name (NOT CASESPECIFIC) = 'George ';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
Snowflake¶
Nota
É necessário COLLATE.
Consulta¶
SELECT
*
FROM
employees
WHERE
COLLATE(first_name /*** SSC-FDM-TD0032 - NOT CASESPECIFIC CLAUSE WAS REMOVED ***/, 'en-cs-rtrim') = 'George ';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
Operação LIKE¶
Caso 1: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE first_name LIKE 'George';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
Snowflake¶
Consulta¶
SELECT *
FROM employees
WHERE COLLATE(first_name, 'en-cs-rtrim') LIKE 'George';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
Caso 2: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE last_name LIKE 'Snow';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
2 |
John |
SNOW |
Engenharia |
3 |
WIlle |
SNOW |
Human resources |
Snowflake¶
Consulta¶
SELECT *
FROM employees
WHERE RTRIM(last_name) LIKE RTRIM('Snow');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
2 |
John |
SNOW |
Engenharia |
3 |
WIlle |
SNOW |
Human resources |
Caso 3: Coluna CAST NOT CASESPECIFIC para CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE first_name LIKE 'Mary' (CASESPECIFIC);
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
5 |
Mary |
SaleS |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
COLLATE(first_name, 'en-cs-rtrim') LIKE 'Mary' /*** SSC-FDM-TD0032 - CASESPECIFIC CLAUSE WAS REMOVED ***/;
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
5 |
Mary |
SaleS |
Caso 4: Coluna CAST CASESPECIFC para NOT CASESPECIFIC e o modo do banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE last_name LIKE 'SNO%' (NOT CASESPECIFIC);
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
2 |
John |
SNOW |
Engenharia |
3 |
WIlle |
SNOW |
Human resources |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
RTRIM(last_name) LIKE RTRIM('SNO%' /*** SSC-FDM-TD0032 - NOT CASESPECIFIC CLAUSE WAS REMOVED ***/);
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
2 |
John |
SNOW |
Engenharia |
3 |
WIlle |
SNOW |
Human resources |
Operação IN¶
Caso 1: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE first_name IN ('George ');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
Snowflake¶
Nota
Esse caso requer COLLATE(_ column_name_ , 'en-cs-rtrim')
Consulta¶
SELECT
*
FROM
employees
WHERE
RTRIM(first_name) IN (COLLATE('George ', 'en-cs-rtrim'));
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
Caso 2: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Nota
Nesse caso, a coluna não tem uma restrição de coluna, mas a restrição padrão no modo Teradata ANSI é CASESPECIFIC.
Consulta¶
SELECT *
FROM employees
WHERE department IN ('EngineerinG ');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
4 |
Marco |
SnoW |
EngineerinG |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
RTRIM(department) IN (RTRIM('EngineerinG '));
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
4 |
Marco |
SnoW |
EngineerinG |
Cláusula ORDER BY¶
Caso 1: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT first_name
FROM employees
ORDER BY first_name;
Saída¶
first_name |
|---|
GeorgE |
GEORGE |
GEORGE |
George |
John |
JOHN |
JOHN |
Marco |
Mary |
WIlle |
Snowflake¶
Aviso
Consulte FDM. _ Pendente para adicionar. _
Consulta¶
SELECT
first_name
FROM
employees
ORDER BY first_name;
Saída¶
first_name |
|---|
GeorgE |
George |
GEORGE |
GEORGE |
John |
JOHN |
JOHN |
Marco |
Mary |
WIlle |
Caso 2: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT last_name
FROM employees
ORDER BY last_name;
Saída¶
department |
|---|
EngineerinG |
Engenharia |
Finance |
Human resources |
IT |
SalEs |
SaleS |
Vendas |
salEs |
sales |
Snowflake¶
Consulta¶
SELECT
last_name
FROM
employees
ORDER BY last_name;
Saída¶
department |
|---|
EngineerinG |
Engenharia |
Finance |
Human resources |
IT |
SalEs |
SaleS |
Vendas |
salEs |
sales |
Cláusula GROUP BY¶
Caso 1: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT first_name
FROM employees
GROUP BY first_name;
Saída¶
first_name |
|---|
Mary |
GeorgE |
WIlle |
JOHN |
Marco |
GEORGE |
Snowflake¶
Aviso
O caso ou a ordem pode diferir na saída.
Nota
RTRIM é necessário em colunas selecionadas.
Consulta¶
SELECT
first_name
FROM
employees
GROUP BY first_name;
Saída¶
first_name |
|---|
John |
Marco |
George |
GeorgE |
WIlle |
Mary |
Caso 2: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT last_name
FROM employees
GROUP BY last_name;
Saída¶
last_name |
|---|
SnoW |
SNOW |
SnoW |
Snow |
snow |
Snowflake¶
Nota
A ordem pode ser diferente.
Consulta¶
SELECT
last_name
FROM
employees
GROUP BY last_name;
Saída¶
first_name |
|---|
Snow |
SNOW |
SnoW |
SnoW |
snow |
Cláusula HAVING¶
A cláusula HAVING usará os padrões em:
Operações de avaliação.
Por exemplo:
=, !=, <, >.
Operação LIKE.
Operação IN.
Operação CAST para avaliação.
Operação CAST para LIKE.
O exemplo a seguir mostra um padrão com operação de avaliação.
Amostra: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT first_name
FROM employees
GROUP BY first_name
HAVING first_name = 'Mary';
Saída¶
Mary
Snowflake¶
Consulta¶
SELECT
first_name
FROM
employees
GROUP BY first_name
HAVING
COLLATE(first_name, 'en-cs-rtrim') = 'Mary';
Saída¶
Mary
Instrução CASEWHEN¶
A instrução CASE WHEN usará os padrões descritos em:
Operações de avaliação.
Por exemplo:
=, !=, <, >.
Operação LIKE.
Operação IN.
Operação CAST para avaliação.
Operação CAST para LIKE.
O exemplo a seguir mostra um padrão com operação de avaliação.
Teradata¶
Consulta¶
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 = '';
Saída¶
first_name |
last_name |
department_full_name |
|---|---|---|
GEORGE |
Outros |
|
Mary |
Outros |
|
GeorgE |
GLOBAL SALES |
|
GEORGE |
Outros |
Snowflake¶
Consulta¶
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('');
Saída¶
first_name |
last_name |
department_full_name |
|---|---|---|
Mary |
Outros |
|
GEORGE |
Outros |
|
GEORGE |
Outros |
|
GeorgE |
GLOBAL SALES |
Cláusula JOIN¶
Aviso
Há suporte para cenários simples com operações de avaliação.
A instrução JOIN usará os padrões descritos em:
Operações de avaliação.
Por exemplo:
=, !=, <, >.
Operação LIKE.
Operação IN.
Operação CAST para avaliação.
Operação CAST para LIKE.
O exemplo a seguir mostra um padrão com operação de avaliação.
Amostra: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
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;
Saída¶
employee_id |
first_name |
last_name |
department_name |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
10 |
JOHN |
snow |
Finance |
Snowflake¶
Nota
d.department_name é NOT CASESPECIFIC, portanto, requer COLLATE.
Consulta¶
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;
Saída¶
employee_id |
first_name |
last_name |
department_name |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
10 |
JOHN |
snow |
Finance |
Modo ANSI para comparação de cadeia de caracteres - NOCOLLATE¶
Esta seção define a especificação de tradução para uma cadeia de caracteres no modo ANSI sem o uso de COLLATE.
Descrição ¶
Modo ANSI para comparação de cadeia de caracteres e usos de NOCOLATE.¶
A comparação de cadeia de caracteres no modo ANSI sem o uso de COLLATE aplicará RTRIM e UPPER conforme necessário. O comportamento padrão do trim da especificação de caso pode ser levado em conta, portanto, se uma coluna não tiver uma especificação de caso no modo Teradata ANSI, o Teradata terá como padrão CASESPECIFIC.
Amostra de padrões de origem ¶
Dados de configuração¶
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');
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');
Operação de comparação¶
Caso 1: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE first_name = 'George ';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
RTRIM(first_name) = RTRIM('George ');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
Caso 2: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE last_name = 'SNOW ';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
Engenharia |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
RTRIM(last_name) = RTRIM('SNOW ');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
Engenharia |
Caso 3: Coluna CAST NOT CASESPECIFIC para CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Aviso
O (CASESPECIFIC) substitui a restrição de coluna na definição da tabela.
Teradata¶
Consulta¶
SELECT * FROM employees WHERE first_name = 'GEorge ' (CASESPECIFIC);
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
6 |
GEORGE |
sales |
Snowflake¶
Consulta¶
SELECT * FROM workers
WHERE RTRIM(first_name) = RTRIM(UPPER('GEorge '));
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
6 |
GEORGE |
sales |
Caso 4: Coluna CAST CASESPECIFIC para NOT CASESPECIFIC e o modo do banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT * FROM employees
WHERE last_name = 'SnoW ' (NOT CASESPECIFIC) ;
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
4 |
Marco |
SnoW |
EngineerinG |
Snowflake¶
Consulta¶
SELECT * FROM employees
WHERE RTRIM(last_name) = RTRIM('SnoW ');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
4 |
Marco |
SnoW |
EngineerinG |
Operação LIKE¶
Caso 1: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE first_name LIKE 'Georg%';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
Snowflake¶
Consulta¶
SELECT *
FROM employees
WHERE first_name LIKE 'Georg%';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
Caso 2: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE last_name LIKE 'Snow';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
Snowflake¶
Consulta¶
SELECT *
FROM employees
WHERE last_name LIKE 'Snow';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
Caso 3: Coluna CAST NOT CASESPECIFIC para NOTCASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE first_name LIKE 'George' (NOT CASESPECIFIC);
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
first_name ILIKE 'George' /*** SSC-FDM-TD0032 - NOT CASESPECIFIC CLAUSE WAS REMOVED ***/;
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
Caso 4: Coluna CAST CASESPECIFIC para NOT CASESPECIFIC e o modo do banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE last_name LIKE 'SNO%' (NOT CASESPECIFIC);
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
2 |
John |
SNOW |
Engenharia |
3 |
WIlle |
SNOW |
Human resources |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
last_name LIKE 'SNO%' /*** SSC-FDM-TD0032 - NOT CASESPECIFIC CLAUSE WAS REMOVED ***/;
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
2 |
John |
SNOW |
Engenharia |
3 |
WIlle |
SNOW |
Human resources |
Operação IN¶
Caso 1: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE first_name IN ('GEORGE ');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
6 |
GEORGE |
sales |
|
7 |
GEORGE |
salEs |
Snowflake¶
Consulta¶
SELECT *
FROM employees
WHERE RTRIM(first_name) IN (RTRIM('GEORGE '));
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
6 |
GEORGE |
sales |
|
7 |
GEORGE |
salEs |
Caso 2: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE department IN ('SaleS');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
5 |
Mary |
SaleS |
Snowflake¶
Consulta¶
SELECT *
FROM employees
WHERE RTRIM(department) IN (RTRIM('SaleS'));
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
5 |
Mary |
SaleS |
Cláusula ORDER BY¶
Nota
Observe que essa equivalência funcional pode ser diferente.
Caso 1: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT department_name
FROM departments
ORDER BY department_name;
Saída¶
department |
|---|
EngineerinG |
Engenharia |
Finance |
Human resources |
IT |
SalEs |
SaleS |
Vendas |
salEs |
sales |
Snowflake¶
Nota
Consulte FDM. A ordem difere na ordem de inserção dos dados.
Consulta¶
SELECT
department_name
FROM
departments
ORDER BY
UPPER(department_name);
Saída¶
department |
|---|
EngineerinG |
Engenharia |
Finance |
Human resources |
IT |
SalEs |
SaleS |
Vendas |
salEs |
sales |
Caso 2: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT last_name
FROM employees
ORDER BY last_name;
Saída¶
department |
|---|
Finance |
Recursos Humanos |
Tecnologia da Informação |
Vendas |
Snowflake¶
Consulta¶
SELECT last_name
FROM employees
ORDER BY last_name;
Saída¶
department |
|---|
Finance |
Recursos Humanos |
Tecnologia da Informação |
Vendas |
Cláusula GROUP BY¶
Aviso
Para garantir uma equivalência funcional, é necessário usar a expressão COLLATE.
Consulte o SSC-EWI-TD0007 para obter mais informações.
Caso 1: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT first_name
FROM employees
GROUP BY first_name;
Saída¶
first_name |
|---|
Mary |
GeorgE |
WIlle |
John |
Marco |
GEORGE |
Snowflake¶
Consulta¶
SELECT
first_name
FROM
employees
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0007 - GROUP BY IS NOT EQUIVALENT IN TERADATA MODE ***/!!!
GROUP BY first_name;
Saída¶
FIRST_NAME |
|---|
George |
John |
WIlle |
Marco |
Mary |
GEORGE |
GEORGE |
GeorgE |
JOHN |
JOHN |
Caso 2: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT last_name
FROM employees
GROUP BY last_name;
Saída¶
last_name |
|---|
SnoW |
SNOW |
SnoW |
Snow |
snow |
Snowflake¶
Consulta¶
SELECT
last_name
FROM
employees
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0007 - GROUP BY IS NOT EQUIVALENT IN TERADATA MODE ***/!!!
GROUP BY last_name;
Saída¶
last_name |
|---|
SnoW |
SNOW |
SnoW |
Snow |
snow |
Cláusula HAVING¶
A cláusula HAVING usará os padrões em:
Operações de avaliação.
Por exemplo:
=, !=, <, >.
Operação LIKE.
Operação IN.
Operação CAST para avaliação.
Operação CAST para LIKE.
O exemplo a seguir mostra um padrão com operação de avaliação.
Amostra: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
SELECT first_name
FROM employees
GROUP BY first_name
HAVING first_name = 'GEORGE';
Saída¶
GEORGE
Snowflake¶
Consulta¶
SELECT
first_name
FROM
employees
GROUP BY first_name
HAVING
RTRIM(first_name) = RTRIM('GEORGE');
Saída¶
GEORGE
Instrução CASEWHEN¶
A instrução CASE WHEN usará os padrões descritos em:
Operações de avaliação.
Por exemplo:
=, !=, <, >.
Operação LIKE.
Operação IN.
Operação CAST para avaliação.
Operação CAST para LIKE.
O exemplo a seguir mostra um padrão com operação de avaliação.
Teradata¶
Consulta¶
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 = ' ';
Saída¶
| first_name | last_name | department_full_name |
|---|---|---|
| GEORGE | Department Full Name | |
| Mary | GLOBAL SALES | |
| GeorgE | Other | |
| GEORGE | Department Full Name |
Snowflake¶
Consulta¶
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(' '));
Saída¶
| first_name | last_name | department_full_name |
|---|---|---|
| GEORGE | Department Full Name | |
| Mary | GLOBAL SALES | |
| GeorgE | Other | |
| GEORGE | Department Full Name |
Cláusula JOIN¶
Aviso
Há suporte para cenários simples.
A instrução JOIN usará os padrões descritos em:
Operações de avaliação.
Por exemplo:
=, !=, <, >.
Operação LIKE.
Operação IN.
Operação CAST para avaliação.
Operação CAST para LIKE.
O exemplo a seguir mostra um padrão com operação de avaliação.
Amostra: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo ANSI¶
Teradata¶
Consulta¶
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;
Saída¶
employee_id |
first_name |
last_name |
department_name |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
10 |
JOHN |
snow |
Finance |
Snowflake¶
Consulta¶
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);
Saída¶
employee_id |
first_name |
last_name |
department_name |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
10 |
JOHN |
snow |
Finance |
EWIs relacionados¶
SSC-EWI-TD0007: GROUP BY IS NOT EQUIVALENT IN TERADATA MODE
Modo TERA para comparação de cadeia de caracteres - COLLATE¶
Esta seção define a especificação de tradução para cadeia de caracteres no modo Tera com o uso de COLLATE.
Descrição ¶
Modo Tera para comparação de cadeia de caracteres e uso de COLLATE¶
A comparação de cadeia de caracteres no modo Tera aplicará a restrição COLLATE às colunas ou instruções, conforme necessário. O comportamento de corte da especificação de maiúsculas e minúsculas padrão pode ser levado em consideração. A especificação de caso padrão no Teradata para o modo TERA é NOT CASESPECIFIC. Assim, as colunas sem especificação de caso terão restrições COLLATE('en-ci').
Amostra de padrões de origem ¶
Dados de configuração¶
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');
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');
Operação de comparação¶
Caso 1: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE first_name = 'GEorge ';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
RTRIM(first_name) = RTRIM('GEorge ');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
Caso 2: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE last_name = 'SNOW ';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
Engenharia |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
RTRIM(last_name) = RTRIM('SNOW ');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
Engenharia |
Caso 3: Coluna CAST NOT CASESPECIFIC para CASESPECIFIC e o modo de banco de dados é modo TERA¶
Nota
Observe que as seguintes consultas
SELECT * FROM employees WHERE first_name = 'JOHN ' (CASESPECIFIC)SELECT * FROM employees WHERE first_name (CASESPECIFIC) = 'JOHN '
retornarão os mesmos valores.
Teradata¶
Consulta¶
SELECT * FROM employees WHERE first_name = 'JOHN ' (CASESPECIFIC);
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
9 |
JOHN |
SnoW |
IT |
10 |
JOHN |
snow |
Finance |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
COLLATE(first_name, 'en-cs-rtrim') = 'JOHN ' /*** SSC-FDM-TD0032 - CASESPECIFIC CLAUSE WAS REMOVED ***/;
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
9 |
JOHN |
SnoW |
IT |
10 |
JOHN |
snow |
Finance |
Caso 4: Coluna CAST CASESPECIFIC para NOT CASESPECIFIC e o modo do banco de dados é modo TERA¶
Nota
CAST para uma coluna no lado esquerdo da comparação tem prioridade.
\ Por exemplo:
SELECT * FROM employees WHERE last_name (NOT CASESPECIFIC) = 'snoW';_retornará 5 linhas. _SELECT * FROM employees WHERE last_name = 'snoW' (NOT CASESPECIFIC);retornará 0 linhas com esses dados de configuração.
Teradata¶
Consulta¶
SELECT * FROM employees WHERE last_name (NOT CASESPECIFIC) = 'snoW' ;
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
2 |
John |
SNOW |
Engenharia |
3 |
WIlle |
SNOW |
Human resources |
4 |
Marco |
SnoW |
EngineerinG |
10 |
JOHN |
snow |
Finance |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
COLLATE(last_name /*** SSC-FDM-TD0032 - NOT CASESPECIFIC CLAUSE WAS REMOVED ***/, 'en-ci-rtrim') = 'snoW' ;
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
2 |
John |
SNOW |
Engenharia |
3 |
WIlle |
SNOW |
Human resources |
4 |
Marco |
SnoW |
EngineerinG |
10 |
JOHN |
snow |
Finance |
Operação LIKE¶
Caso 1: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE first_name LIKE 'GeorgE';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
RTRIM(first_name) LIKE RTRIM('GeorgE');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
Caso 2: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE last_name LIKE 'Snow';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
RTRIM(last_name) LIKE RTRIM('Snow');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
Caso 3: Coluna CAST NOT CASESPECIFIC para CASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE first_name LIKE 'George' (CASESPECIFIC);
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
COLLATE(first_name, 'en-cs-rtrim') LIKE 'George';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
Caso 4: Coluna CAST CASESPECIFIC para NOT CASESPECIFIC e o modo do banco de dados é modo TERA¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE last_name LIKE 'SNO%' (NOT CASESPECIFIC);
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
Engenharia |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
RTRIM(last_name) LIKE RTRIM('SNO%' /*** SSC-FDM-TD0032 - NOT CASESPECIFIC CLAUSE WAS REMOVED ***/);
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
Engenharia |
Operação IN¶
Caso 1: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE first_name IN ('George ');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
RTRIM(first_name) IN (RTRIM('George '));
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
Caso 2: A restrição de coluna não é definida e o modo de banco de dados é modo TERA¶
Nota
No modo Tera, a especificação de caso não definida significa NOT CASESPECIFIC.
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE department IN ('Sales ');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
5 |
Mary |
SaleS |
|
6 |
GEORGE |
sales |
|
7 |
GEORGE |
salEs |
|
8 |
GeorgE |
SalEs |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
RTRIM(department) IN (RTRIM('Sales '));
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
5 |
Mary |
SaleS |
|
6 |
GEORGE |
sales |
|
7 |
GEORGE |
salEs |
|
8 |
GeorgE |
SalEs |
Caso 3: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE last_name IN ('SNOW ');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
Engenharia |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
RTRIM(last_name) IN (RTRIM('SNOW '));
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
Engenharia |
Cláusula ORDER BY¶
Caso 1: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Consulta¶
SELECT employee_id, first_name
FROM employees
ORDER BY employee_id, first_name;
Saída¶
| employee_id | first_name |
|---|---|
| 1 | George |
| 2 | John |
| 3 | WIlle |
| 4 | Marco |
| 5 | Mary |
| 6 | GEORGE |
| 7 | GEORGE |
| 8 | GeorgE |
| 9 | JOHN |
| 10 | JOHN |
Snowflake¶
Consulta¶
SELECT employee_id, first_name
FROM employees
ORDER BY employee_id, first_name;
Saída¶
| employee_id | first_name |
|---|---|
| 1 | George |
| 2 | John |
| 3 | WIlle |
| 4 | Marco |
| 5 | Mary |
| 6 | GEORGE |
| 7 | GEORGE |
| 8 | GeorgE |
| 9 | JOHN |
| 10 | JOHN |
Caso 2: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Consulta¶
SELECT employee_id, last_name
FROM employees
ORDER BY employee_id, last_name;
Saída¶
| employee_id | last_name |
|---|---|
| 1 | Snow |
| 2 | SNOW |
| 3 | SNOW |
| 4 | SnoW |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | SnoW |
| 10 | snow |
Snowflake¶
Consulta¶
SELECT employee_id, last_name
FROM employees
ORDER BY employee_id, last_name;
Saída¶
| employee_id | last_name |
|---|---|
| 1 | Snow |
| 2 | SNOW |
| 3 | SNOW |
| 4 | SnoW |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9 | SnoW |
| 10 | snow |
Cláusula GROUP BY¶
Caso 1: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Consulta¶
SELECT first_name
FROM employees
GROUP BY first_name;
Saída¶
first_name |
|---|
Mary |
GeorgE |
WIlle |
JOHN |
Marco |
GEORGE |
Snowflake¶
Aviso
A especificação de caso na saída pode variar de acordo com o número de colunas selecionadas.
Consulta¶
SELECT
first_name
FROM
employees
GROUP BY first_name;
Saída¶
first_name |
|---|
John |
Marco |
George |
GeorgE |
WIlle |
Mary |
Caso 2: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Consulta¶
SELECT last_name
FROM employees
GROUP BY last_name;
Saída¶
last_name |
|---|
SnoW |
SNOW |
SnoW |
Snow |
snow |
Snowflake¶
Consulta¶
SELECT
last_name
FROM
employees
GROUP BY last_name;
Saída¶
last_name |
|---|
SnoW |
SNOW |
SnoW |
Snow |
snow |
Cláusula HAVING¶
A cláusula HAVING usará os padrões em:
Operações de avaliação.
Por exemplo:
=, !=, <, >.
Operação LIKE.
Operação IN.
Operação CAST para avaliação.
Operação CAST para LIKE.
O exemplo a seguir mostra um padrão com operação de avaliação.
Amostra: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Nota
A especificação de caso na saída pode variar de acordo com o número de colunas selecionadas. Isso também está relacionado à cláusula GROUP BY.
Consulta¶
SELECT first_name
FROM employees
GROUP BY first_name
HAVING first_name = 'George ';
Saída¶
| employee_id | first_name |
|---|---|
| 7 | GEORGE |
| 1 | George |
| 6 | GEORGE |
Snowflake¶
Consulta¶
SELECT
employee_id,
first_name
FROM
employees
GROUP BY employee_id, first_name
HAVING
RTRIM(first_name) = RTRIM('George ');
Saída¶
| employee_id | first_name |
|---|---|
| 7 | GEORGE |
| 1 | George |
| 6 | GEORGE |
Instrução CASEWHEN¶
A instrução CASE WHEN usará os padrões descritos em:
Operações de avaliação.
Por exemplo:
=, !=, <, >.
Operação LIKE.
Operação IN.
Operação CAST para avaliação.
Operação CAST para LIKE.
O exemplo a seguir mostra um padrão com operação de avaliação.
Teradata¶
Consulta¶
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 = '';
Saída¶
first_name |
last_name |
department_full_name |
|---|---|---|
GEORGE |
GLOBAL SALES |
|
Mary |
Outros |
|
GeorgE |
Outros |
|
GEORGE |
GLOBAL SALES |
Snowflake¶
Consulta¶
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('');
Saída¶
first_name |
last_name |
department_full_name |
|---|---|---|
GEORGE |
GLOBAL SALES |
|
Mary |
Outros |
|
GeorgE |
Outros |
|
GEORGE |
GLOBAL SALES |
Cláusula JOIN¶
Aviso
Há suporte para cenários simples com operações de avaliação.
A instrução JOIN usará os padrões descritos em:
operações EvaluaComparisonComparisontion.
Por exemplo:
=, !=, <, >.
Operação LIKE.
Operação IN.
Operação CAST para avaliação.
Operação CAST para LIKE.
O exemplo a seguir mostra um padrão com operação de avaliação.
Amostra: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Consulta¶
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;
Saída¶
employee_id |
first_name |
last_name |
department_name |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
3 |
WIlle |
SNOW |
Recursos Humanos |
5 |
Mary |
Vendas |
|
6 |
GEORGE |
Vendas |
|
7 |
GEORGE |
Vendas |
|
8 |
GeorgE |
Vendas |
|
10 |
JOHN |
snow |
Finance |
Snowflake¶
Consulta¶
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);
Saída¶
employee_id |
first_name |
last_name |
department_name |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
3 |
WIlle |
SNOW |
Recursos Humanos |
5 |
Mary |
Vendas |
|
6 |
GEORGE |
Vendas |
|
7 |
GEORGE |
Vendas |
|
8 |
GeorgE |
Vendas |
|
10 |
JOHN |
snow |
Finance |
EWIs relacionados¶
SSC-EWI-TD0007: GROUP BY REQUIRED COLLATE FOR CASE INSENSITIVE COLUMNS
SC-FDM-TD0032 : [NOT] CASESPECIFIC CLAUSE WAS REMOVED
Modo TERA para comparação de cadeia de caracteres - NOCOLLATE¶
Esta seção define a especificação de tradução para cadeia de caracteres no modo Tera sem usar COLLATE.
Descrição ¶
Modo Tera para comparação de cadeia de caracteres e usos de NOCOLLATE¶
A comparação de cadeia de caracteres no modo Tera sem o uso de COLLATE aplicará RTRIM e UPPER conforme necessário. O comportamento de corte da especificação de maiúsculas e minúsculas padrão pode ser levado em consideração.
Amostra de padrões de origem ¶
Dados de configuração¶
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');
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');
Operação de comparação¶
Caso 1: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo TERA¶
Este exemplo demonstra o uso de uma coluna configurada como NOT CASESPECIFIC, pois é uma coluna first_name. Mesmo ao solicitar a cadeia de caracteres 'GEorge', a execução da consulta recuperará resultados no Teradata porque a especificação de caso não é considerada.
Para emular esse cenário no Snowflake, são implementadas duas funções: RTRIM(UPPER(string_evaluation)), UPPER é necessário nesse cenário porque a cadeia de caracteres não analisa a especificação do caso.
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE first_name = 'GEorge ';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
RTRIM(UPPER(first_name)) = RTRIM(UPPER('GEorge '));
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
Caso 2: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo TERA¶
Para este exemplo, a restrição de coluna é CASESPECIFIC, para a qual o exemplo não recupera linhas no Teradata porque “Snow” não é igual a “SNOW”.
No Snowflake, a migração resultante aponta apenas para o uso da função RTRIM, pois a especificação do caso é importante.
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE last_name = 'SNOW ';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
Engenharia |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
RTRIM(last_name) = RTRIM('SNOW ');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
3 |
WIlle |
SNOW |
Human resources |
2 |
John |
SNOW |
Engenharia |
Caso 3: Coluna CAST CASESPECIFIC para NOTCASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Aviso
O (CASESPECIFIC) substitui a restrição de coluna na definição da tabela.
Consulta¶
SELECT * FROM employees WHERE first_name = 'GEORGE ' (CASESPECIFIC);
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
6 |
GEORGE |
sales |
Snowflake¶
Nota
RTRIM é necessário no lado esquerdo, e RTRIM é necessário no lado direito.
Consulta¶
SELECT
*
FROM
employees
WHERE
RTRIM(first_name) = RTRIM('GEORGE ' /*** SSC-FDM-TD0032 - CASESPECIFIC CLAUSE WAS REMOVED ***/);
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
6 |
GEORGE |
sales |
Caso 4: Coluna CAST NOTCASESPECIFIC para NOT CASESPECIFIC e o modo do banco de dados é modo TERA¶
Teradata¶
Consulta¶
SELECT * FROM employees WHERE first_name = 'GEorge ' (NOT CASESPECIFIC) ;
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
UPPER(RTRIM(first_name)) = UPPER(RTRIM('GEorge ' /*** SSC-FDM-TD0032 - NOT CASESPECIFIC CLAUSE WAS REMOVED ***/));
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
Caso 5: Caso de espaços em branco. A restrição de coluna é NOT CASESPECIFIC, o modo de banco de dados é modo TERA Mode e o uso da operação igual¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE last_name = ' ';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
5 |
Mary |
SaleS |
|
8 |
GeorgE |
SalEs |
|
6 |
GEORGE |
sales |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
RTRIM(last_name) = RTRIM(' ');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
5 |
Mary |
SaleS |
|
8 |
GeorgE |
SalEs |
|
6 |
GEORGE |
sales |
Operação LIKE¶
Nota
Essa operação funciona de forma diferente de outra. Os espaços em branco devem ter a mesma quantidade para recuperar as informações.
Caso 1: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo TERA¶
Espera-se que este exemplo exiba uma linha porque a especificação do caso não é relevante.
Nota
No Snowflake, a migração usa a operação ILIKE. Isso realiza uma comparação sem distinção entre maiúsculas e minúsculas.
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE first_name LIKE 'GeorgE';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
Snowflake¶
Consulta¶
SELECT *
FROM employees
WHERE first_name ILIKE 'GeorgE';
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
Caso 2: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE last_name LIKE 'Snow';
Saída¶
first_name |
last_name |
department |
|---|---|---|
George |
Snow |
Vendas |
Jonh |
Snow |
Engenharia |
Snowflake¶
Consulta¶
SELECT *
FROM employees
WHERE last_name LIKE 'Snow';
Saída¶
first_name |
last_name |
department |
|---|---|---|
George |
Snow |
Vendas |
Jonh |
Snow |
Engenharia |
Caso 3: Coluna CAST CASESPECIFIC para NOTCASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE first_name LIKE 'George' (NOT CASESPECIFIC);
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
first_name ILIKE 'George' /*** SSC-FDM-TD0032 - NOT CASESPECIFIC CLAUSE WAS REMOVED ***/;
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
Caso 4: Coluna CAST NOTCASESPECIFIC para NOT CASESPECIFIC e o modo do banco de dados é modo ANSI¶
Nota
Esse caso exige a conversão para ILIKE.
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE first_name LIKE 'GE%' (NOT CASESPECIFIC);
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
Snowflake¶
Consulta¶
SELECT
*
FROM
employees
WHERE
first_name ILIKE 'GE%' /*** SSC-FDM-TD0032 - NOT CASESPECIFIC CLAUSE WAS REMOVED ***/;
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
Operação IN¶
Caso 1: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE first_name IN ('GeorgE');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
Snowflake¶
Consulta¶
SELECT *
FROM employees
WHERE RTRIM(UPPER(first_name)) IN (RTRIM(UPPER('GeorgE')));
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
7 |
GEORGE |
salEs |
|
1 |
George |
Snow |
Vendas |
6 |
GEORGE |
sales |
Caso 2: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo TERA¶
Neste exemplo, o uso da função UPPER não é necessário, pois, no banco de dados Teradata, a especificação do caso é relevante para os resultados.
Teradata¶
Consulta¶
SELECT *
FROM employees
WHERE last_name IN ('SnoW');
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
4 |
Marco |
SnoW |
EngineerinG |
Snowflake¶
Consulta¶
SELECT *
FROM employees
WHERE RTRIM(last_name) IN (RTRIM('SnoW'));
Saída¶
employee_id |
first_name |
last_name |
department |
|---|---|---|---|
4 |
Marco |
SnoW |
EngineerinG |
Cláusula ORDER BY¶
Caso 1: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo TERA¶
Perigo
Observe que essa ordem de saída pode ser diferente.
Teradata¶
Consulta¶
SELECT department
FROM employees
ORDER BY department;
Saída¶
department |
|---|
EngineerinG |
Engenharia |
Finance |
Human resources |
IT |
sales |
SalEs |
Vendas |
SaleS |
salEs |
Snowflake¶
Consulta¶
SELECT department
FROM employees
ORDER BY UPPER(department);
Saída¶
department |
|---|
EngineerinG |
Engenharia |
Finance |
Human resources |
IT |
sales |
SalEs |
Vendas |
SaleS |
salEs |
Caso 2: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo TERA¶
Perigo
Observe que essa saída pode diferir na ordem.
Teradata¶
Consulta¶
SELECT last_name
FROM employees
ORDER BY last_name;
Saída¶
last_name |
|---|
SnoW |
SNOW |
SNOW |
SnoW |
Snow |
snow |
Snowflake¶
Consulta¶
SELECT last_name
FROM employees
ORDER BY last_name;
Saída¶
last_name |
|---|
SnoW |
SNOW |
SNOW |
SnoW |
Snow |
snow |
Cláusula GROUP BY¶
Aviso
Observe que essa saída pode ser diferente. Para garantir uma equivalência funcional, é necessário usar a expressão COLLATE.
Consulte SSC-EWI-TD0007 para obter mais informações.
_O seguinte pode ser uma solução alternativa sem collate: _
SELECTRTRIM(UPPER(first_name))
FROM employees
GROUPBYRTRIM(UPPER(first_name));
Sobre o comportamento da coluna
Perigo
Revise a inserção de dados no Snowflake. O Snowflake permite a inserção de valores como “GEORGE” e “georges” sem mostrar erros porque a especificação do caso não está vinculada explicitamente à coluna.
Suponha uma tabela e os dados a seguir:
CREATE TABLE students (
first_name VARCHAR(50) NOT CASESPECIFIC
);
INSERT INTO students(first_name) VALUES ('George');
INSERT INTO students(first_name) VALUES (' George');
Observe que esse exemplo não permite a inserção de valores com letras maiúsculas e minúsculas na coluna NOT CASESPECIFIC porque ele considera o mesmo valor. Como a coluna não supervisiona a especificação do caso, os valores “GEORGE” e “george” são verificados como a mesma informação.
As linhas a seguir são consideradas como erros de linhas duplicadas :
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');
Caso 1: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Consulta¶
SELECT first_name
FROM employees
GROUP BY first_name;
Saída¶
first_name |
|---|
Mary |
GeorgE |
WIlle |
JOHN |
Marco |
GEORGE |
Snowflake¶
Consulta¶
SELECT
first_name
FROM
employees
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0007 - GROUP BY IS NOT EQUIVALENT IN TERADATA MODE ***/!!!
GROUP BY first_name;
Saída¶
first_name |
|---|
George |
John |
WIlle |
Marco |
Mary |
GEORGE |
GEORGE |
GeorgE |
JOHN |
JOHN |
Caso 2: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Consulta¶
SELECT last_name
FROM employees
GROUP BY last_name;
Saída¶
last_name |
|---|
SnoW |
SNOW |
SnoW |
Snow |
snow |
Snowflake¶
Consulta¶
SELECT
last_name
FROM
employees
!!!RESOLVE EWI!!! /*** SSC-EWI-TD0007 - GROUP BY IS NOT EQUIVALENT IN TERADATA MODE ***/!!!
GROUP BY last_name;
Saída¶
last_name |
|---|
SnoW |
SNOW |
SnoW |
Snow |
snow |
Cláusula HAVING¶
A cláusula HAVING usará os padrões em:
Operações de avaliação.
Por exemplo:
=, !=, <, >.
Operação LIKE.
Operação IN.
Operação CAST para avaliação.
Operação CAST para LIKE.
O exemplo a seguir mostra um padrão com operação de avaliação.
Amostra: A restrição de coluna é CASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Consulta¶
SELECT last_name
FROM employees
GROUP BY last_name
HAVING last_name = 'Snow';
Saída¶
last_name |
|---|
Snow |
Snowflake¶
Consulta¶
SELECT last_name
FROM employees
GROUP BY last_name
HAVING RTRIM(last_name) = RTRIM('Snow');
Saída¶
last_name |
|---|
Snow |
Instrução CASEWHEN¶
A instrução CASE WHEN usará os padrões descritos em:
Operações de avaliação.
Por exemplo:
=, !=, <, >.
Operação LIKE.
Operação IN.
Operação CAST para avaliação.
Operação CAST para LIKE.
O exemplo a seguir mostra um padrão com operação de avaliação.
Teradata¶
Consulta¶
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;
Saída¶
first_name |
last_name |
department_full_name |
|---|---|---|
GEORGE |
Outros |
|
JOHN |
SnoW |
Outros |
Mary |
Outros |
|
JOHN |
snow |
Outros |
WIlle |
SNOW |
GLOBAL COOL SALES |
George |
Snow |
Outros |
GeorgE |
Outros |
|
GEORGE |
Outros |
|
Marco |
SnoW |
Tecnologia da Informação |
John |
SNOW |
Tecnologia da Informação |
Snowflake¶
Consulta¶
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;
Saída¶
first_name |
last_name |
department_full_name |
|---|---|---|
GEORGE |
Outros |
|
JOHN |
SnoW |
Outros |
Mary |
Outros |
|
JOHN |
snow |
Outros |
WIlle |
SNOW |
GLOBAL COOL SALES |
George |
Snow |
Outros |
GeorgE |
Outros |
|
GEORGE |
Outros |
|
Marco |
SnoW |
Tecnologia da Informação |
John |
SNOW |
Tecnologia da Informação |
Cláusula JOIN¶
Aviso
Há suporte para cenários simples.
A instrução JOIN usará os padrões descritos em:
Operações de avaliação.
Por exemplo:
=, !=, <, >.
Operação LIKE.
Operação IN.
Operação CAST para avaliação.
Operação CAST para LIKE.
O exemplo a seguir mostra um padrão com operação de avaliação.
Amostra: A restrição de coluna é NOT CASESPECIFIC e o modo de banco de dados é modo TERA¶
Teradata¶
Consulta¶
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;
Saída¶
| employee_id | first_name | last_name | department_name |
|---|---|---|---|
| 1 | George | Snow | Sales |
| 3 | WIlle | SNOW | Human Resources |
| 5 | Mary | Sales | |
| 6 | GEORGE | Sales | |
| 7 | GEORGE | Sales | |
| 8 | GeorgE | Sales | |
| 10 | JOHN | snow | Finance |
Snowflake¶
Consulta¶
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));
Saída¶
| employee_id | first_name | last_name | department_name |
|---|---|---|---|
| 1 | George | Snow | Sales |
| 3 | WIlle | SNOW | Human Resources |
| 5 | Mary | Sales | |
| 6 | GEORGE | Sales | |
| 7 | GEORGE | Sales | |
| 8 | GeorgE | Sales | |
| 10 | JOHN | snow | Finance |
Problemas conhecidos¶
Existem algumas restrições de instrução SQL específicas de modo:
BEGIN TRANSACTION,END TRANSACTION,COMMIT [WORK].A inserção de dados pode ser diferente no Snowflake, pois a especificação do caso não está vinculada à instrução da coluna.
GROUP BYpode diferir na ordem, mas agrupa os valores corretos.ORDER BYse comporta de forma diferente no Snowflake.Se uma função tiver um TRIM() no código-fonte, essa solução alternativa adicionará as funções necessárias ao código-fonte. Portanto, RTRIM será aplicado à função de origem TRIM().
EWIs relacionados¶
SSC-EWI-TD0007: GROUP BY IS NOT EQUIVALENT IN TERADATA MODE