Teradata SQL Tricks for SQL Server/Oracle Developers
Context
For many SQL Server or Oracle developers, you may encounter some inconveniences when writing SQL queries. For example, how to select from dummy table or local defined variables.
This page summarize the equivalents in Teradata SQL.
Select from Dummy
In Teradata, the syntax is very similar to SQL Server when selecting data from dummies.
SQL Server T-SQL or Teradata
SELECT CURRENT_TIMESTAMP
Oracle PL/SQL
SELECT CURRENT_TIMESTAMP from dual
One Limitation in Teradata
You cannot select without an object name when it is placed in union.
For example, the following SQL will encounter one error:
SELECT CURRENT_TIMESTAMP AS mytime
UNION
SELECT CURRENT_TIMESTAMP + CAST('10-01' AS INTERVAL YEAR(2) TO MONTH);
Executed as Single statement. Failed [3888 : 42000] A SELECT for a UNION,INTERSECT or MINUS must reference a table.
One trick it to use one dummy table:
WITH dummy(num) AS
(
SELECT 1 AS num)
SELECT CURRENT_TIMESTAMP AS mytime
FROM dummy
UNION
SELECT CURRENT_TIMESTAMP + CAST('10-01' AS INTERVAL YEAR(2) TO MONTH)
FROM dummy;
Local Variables in Direct SQL Statements
In Teradata, you can only define local variables in macros, procedures and functions. In SQL Server or Oracle you can define it very easily.
Oracle PL/SQL
DECLARE id NUMBER := 1000;
SQL Server T-SQL
DECLARE @id integer = 1000;
Teradata
As we did for UINON example, we can use the same trick for local variables. You can extend the queries to joins and etc.
WITH variables(months) AS
(
SELECT 10 AS months)
SELECT ADD_MONTHS(CURRENT_TIMESTAMP, v.months)
FROM variables AS v;
Or the simplest way is to use literal values directly in your query instead of using ‘variables’.
SELECT ADD_MONTHS(CURRENT_TIMESTAMP, 10)
Summary
If you find difficulty to write other queries in Teradata, feel free to raise it here in the comment area.