Полезные запросы Teradata

21 апреля 2021, SQL, Konstantin

Пополняемый список полезных запросов Teradata, которые могут пригодиться в работе.

Поиск представлений, использующих искомую таблицу:

SELECT *
FROM dbc.tablesv tbl
WHERE 1=1
      AND tbl.RequestText LIKE '%table@_namet%' escape '@'
      AND tbl.Tablekind IN ('V');

Поиск представлений, с искомым полем/столбцом:

SELECT DatabaseName,    TableName
FROM dbc.columnsv tbl
WHERE ColumnName = 'column_name';

Продолжить чтение »

Теги:
 

Если на этапе заполнения базы данных разработчики не предусмотрели механизма предварительной проверки правильности e-mail, то полезной будет следующая функция. Она возвращает 1, если адрес электронной почты корректен, и код ошибки в противном случае:

CREATE OR REPLACE FUNCTION EMAIL_CHECK (email varchar2)
--проверяет адрес эл. почты 1 - else - not ok
/********************************************/
--КОДЫ ОШИБОК
--0   Пустой email
--99  Нет символа @ или не заполнено имя пользователя или пароль
--100 Введённый email содержит пробелы в имени пользователя.
--101 Точка (.), в имени пользователя не может быть первым символом.
--102 Минус (-), в имени пользователя не может быть первым символом.
--103 Подчёркивание (_), в имени пользователя не может быть первым символом.
--104 Введённый email содержит недопустимые символы в имени пользователя
--105 Введённый email содержит пробелы в домене.
--106 Домен должен содержать хотя бы одну точку (.).
--107 Точка (.), в домене не может быть первым или последним символом.
--108 Введённый email содержит недопустимые символы в домене
--109 Введённый email содержит недопустимые символы в суффиксе домена (то, что написано после последней точки)
/********************************************/
RETURN INT
IS
 R INT:= 1;
 username VARCHAR(200);
 DOMAIN VARCHAR(200);
 msg VARCHAR(255);
 temp_str VARCHAR(200);
 len INT;
 
BEGIN
IF ltrim(rtrim(email)) IS NOT NULL THEN
 username:=LOWER(substr(email,1,instr(email,'@')-1));
 DOMAIN:=LOWER(substr(email,instr(email,'@')+1,LENGTH(email)-instr(email,'@')+1));
 
-- проверка @ и длины имени пользователя и домена
IF LENGTH(username)=0 OR LENGTH(DOMAIN)=0 THEN
    R := 99;
END IF;
 
-- проверка правильности имени пользователя
IF instr(username,' ')!=0 THEN
    R := 100;
END IF;
 
IF substr(username,1,1)='.' THEN
    R := 101;
END IF;
 
IF substr(username,1,1)='-' THEN
    R := 102;
END IF;
 
IF substr(username,1,1)='_' THEN
    R := 103;
END IF;
 
temp_str:=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(username,'a',''),'b',''),'c',''),'d',''),'e',''),'f',''),'g',''),'h',''),'i',''),'j',''),'k',''),'l',''),'m',''),'n',''),'o',''),'p',''),'q',''),'r',''),'s',''),'t',''),'u',''),'v',''),'w',''),'x',''),'y',''),'z',''),'.',''),'_',''),'-',''),'0',''),'1',''),'2',''),'3',''),'4',''),'5',''),'6',''),'7',''),'8',''),'9','');
 
IF LENGTH(temp_str)<>0 THEN
    R := 104;
END IF;
 
 
-- проверка правильности домена
IF instr(DOMAIN,' ')!=0 THEN
    R := 105;
END IF;
 
IF instr(DOMAIN,'.')=0 THEN
    R := 106;
END IF;
 
IF substr(DOMAIN,1,1)='.' OR substr(DOMAIN,LENGTH(DOMAIN),1)='.' THEN
    R := 107;
END IF;
      temp_str:=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(DOMAIN,'a',''),'b',''),'c',''),'d',''),'e',''),'f',''),'g',''),'h',''),'i',''),'j',''),'k',''),'l',''),'m',''),'n',''),'o',''),'p',''),'q',''),'r',''),'s',''),'t',''),'u',''),'v',''),'w',''),'x',''),'y',''),'z',''),'.',''),'-',''),'0',''),'1',''),'2',''),'3',''),'4',''),'5',''),'6',''),'7',''),'8',''),'9','');
 
IF LENGTH(temp_str)<>0 THEN
    R := 108;
END IF;
 
len:=LENGTH(DOMAIN);
while len>0 loop
   IF substr(DOMAIN,len,1)='.' THEN
     exit;
   END IF;
   len := len - 1;
END loop;
 
temp_str:=REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(substr(DOMAIN,len+1,LENGTH(DOMAIN)-len+1),'a',''),'b',''),'c',''),'d',''),'e',''),'f',''),'g',''),'h',''),'i',''),'j',''),'k',''),'l',''),'m',''),'n',''),'o',''),'p',''),'q',''),'r',''),'s',''),'t',''),'u',''),'v',''),'w',''),'x',''),'y',''),'z','');
 
IF LENGTH(temp_str)<>0 THEN
    R := 109;
END IF;
 
ELSE
  R := 0;
END IF;
  RETURN(R);
END;

Продолжить чтение »

Теги:
 

Полезное руководство по преобразованию запросов из формата Microsoft SQL в Teradata SQL.

В приведенных примерах ссылка на объект «mufford» — это некое личное хранилище. Следует заменять на собственное.

Команда SELECT

Простой SELECT

SQL Server

1
2
3
4
5
6
USE AdventureWorksDW2012;
GO
 
SELECT TOP 10 ProductKey
  , EnglishProductName 
FROM dbo.DimProduct;

или

1
2
3
SELECT TOP 10 ProductKey
  , EnglishProductName 
FROM AdventureWorksDW2012.dbo.DimProduct;

Teradata

1
2
3
SELECT TOP 10 P_PartKey
  , P_Name 
FROM retail.Product;

Продолжить чтение »

Теги: