Teradata SQL Scenarios1

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 11

CREATE SET TABLE samp1

(
dte1 DATE FORMAT 'YYYY-MM-DD' ,
dte2 DATE FORMAT 'YYYY-MM-DD'
) ;

Query to find Date Difference is > 3 yrs along with Leap Year:
-------------------------------------------------------------

SELECT
DTE1 AS DT1,
DTE2 AS DT2,
(DT1 - DT2) AS NO_OF_DAYS,
(DT1 (INT)) - (DT2 (INT)) DAYS1,
(DTE1(DECIMAL(18,6)))-(DTE2(DECIMAL(18,6))))/10000 YRS
FROM
SAMP1;

SELECT
DTE1 AS DT1,
DTE2 AS DT2,
(DT1 - DT2) AS NO_OF_DAYS,
(DT1 (INT)) - (DT2 (INT)) DAYS1,
(DTE1(DECIMAL(18,6)))-(DTE2(DECIMAL(18,6))))/10000 YRS
FROM
SAMP1
WHERE

YRS>3;

Start Date

End Date

Date Difference

2012-03-25

2009-03-27

1094

2012-03-26

2009-03-27

1095

2012-03-26

2009-03-26

1096

2012-03-26

2009-03-25

1097

2011-03-26

2008-03-26

1095

2012-03-26

2007-03-28

1825

2012-03-26

2007-03-27

1826

2012-03-26

2007-03-26

1827

2012-03-26

2007-03-25

1828

SELECT
dte1 as dt1,
dte2 as dt2,
(dt1 - dt2) as no_of_days,
(dt1 - dt2)/365 as no_of_yrs1,
cast((dt1 - dt2)/365.25 as integer) as no_of_yrs2,
extract (year from dt1) - extract (year from dt2)
case when extract(month from dt1) lt extract(month from dt2) then 1
else (case when extract(day from dt1) lt extract(day from dt2) the
n 1 else 0 end) end as no_of_yrs3;

*********************************

Char to date format conversion

sel
cast((cast((COVERAGE_EFF_DTE (format 'yyyy/mm/dd')) as char(10)))) as date
from
samp1

sel
cast(x.cfd as date format 'mmddyyyy')
from
(
sel
case when CDTE=' ' then '01011800' else CDTE END cfd
from
tble1)x;

SEL
CAST(X.CED AS DATE FORMAT 'MMDDYYYY'),
CAST(X.CEDTE AS DATE FORMAT 'MMDDYYYY')
FROM
(
SELECT
CASE WHEN CDTE=' ' THEN '01011800' ELSE CDTE END CED,
CASE WHEN CODTE=' ' THEN '31123000' ELSE CDTE END CEDTE
FROM
tble2)X;

SELECT CAST(1000000 + 070401 AS DATE FORMAT 'YYYY-MM-DD')

Output is 2007-04-01

SELECT CAST(1070401 AS DATE FORMAT 'YYYY-MM-DD');

*****************************

CSV File data format in Files (avoid 2+E123454) Integer values

SELECT
'="' || RNBR|| '"'
FROM

(CHAR(22))

tble1 ;

************************

Find Second Maximum Date

select
col1,
col2,

rank () OVER (order by col1 desc) as rank_date


from
table 1
where rank_date=2;

Second Minimum Date:


*******************

select login_Id, login_dt


from your_table
qualify row_number() over (partition by login_ID order by login_dt asc ) = 2 ;

*****************************************

Finding Day of a Week:

sel CAST(CAST( current_timestamp AS FORMAT 'E4') AS CHAR(9)) ;

SELECT CAST(CAST(timestamp'2011-09-21 00:06:04' as format 'E3') as CHAR(3));

SEL CAST(CURRENT_TIMESTAMP AS DATE) (FORMAT 'EEEE') (CHAR(9)) ,CAST(CURRENT_TI


MESTAMP AS DATE) (FORMAT 'MMMM') (CHAR(9));

Select
CASE (( cast('2011-12-18 12:13:36' as date) - DATE '1900-01-01') Mod 7) +1
WHEN 0 THEN 'Sun'
WHEN 1 THEN 'Mon'
WHEN 2 THEN 'Tue'
WHEN 3 THEN 'Wed'
WHEN 4 THEN 'Thu'
WHEN 5 THEN 'Fri'
WHEN 6 THEN 'Sat' END;

***************************************

Rownum

CREATE TABLE SAMP1


(
USER_ID INTEGER,
USER_NAME VARCHAR(25)
)UNIQUE PRIMARY INDEX PIDX (USER_ID);

INSERT INTO SAMP1 VALUES (10,'DAN');


INSERT INTO SAMP1 VALUES (11,'SAM');
INSERT INTO SAMP1 VALUES (12,'JOHN');

SEL
A.USER_ID,

A.USER_NAME,
A.DT||A.RN AS YR
FROM
(
SEL
DATE(DATE,FORMAT 'YYYYMMDD') (CHAR(8)) AS DT,
SUM(1) OVER( ROWS UNBOUNDED PRECEDING) (INTEGER,FORMAT'9999999')(CHAR(7)) AS RN,
USER_ID,
USER_NAME
FROM
SAMP1)A;

select
sum(1) over( rows unbounded preceding),
USER_ID,
USER_NAME
from
SAMP1;

select
ROW_NUMBER() over(ORDER BY USER_NAME),
USER_ID,
USER_NAME

from
SAMP1;

select
csum(1,1),
USER_ID,
USER_NAME
from
SAMP1;

******************************

field to be populated with the sequence number along with the current date (YYYY
MMDD0000001 Format)

CREATE TABLE SAMP2


(
USER_ID INTEGER,
USER_NAME VARCHAR(25),
DTE DATE
)UNIQUE PRIMARY INDEX PIDX (USER_ID);

INSERT INTO SAMP2 VALUES (10,'DAN',DATE);


INSERT INTO SAMP2 VALUES (11,'SAM',DATE);
INSERT INTO SAMP2 VALUES (12,'JOHN',DATE);
INSERT INTO SAMP2 VALUES (13,'JHN',DATE);
INSERT INTO SAMP2 VALUES (14,'OHN',DATE);
INSERT INTO SAMP2 VALUES (15,'SUN',DATE);

INSERT INTO SAMP2 VALUES (16,'VJ',DATE);


INSERT INTO SAMP2 VALUES (17,'SJ',DATE);
INSERT INTO SAMP2 VALUES (18,'SAN',DATE);
INSERT INTO SAMP2 VALUES (19,'VN',DATE);
INSERT INTO SAMP2 VALUES (20,'HAN',DATE);
INSERT INTO SAMP2 VALUES (21,'ON',DATE);
INSERT INTO SAMP2 VALUES (22,'JAN',DATE);

Select Substring('0000' From 1 For Chars(Trim(Seq_No)))||Trim(Seq_No)


From tbl;

SEL
A.USER_ID,
A.USER_NAME,
A.DT||A.RN AS YR
FROM
(
SEL
SUM(1) OVER( ROWS UNBOUNDED PRECEDING) (INTEGER,FORMAT'9999999')(CHAR(7)) AS RN,
USER_ID,
USER_NAME,
DTE(DATE,FORMAT 'YYYYMMDD') (CHAR(8)) AS DT
FROM
SAMP2)A;

**************************

Split a decimal number into two : (Before Decimal & After Decimal)

302.445500 =====> 302-445500

SELECT
198.02345
,SUBSTR(TRIM(198.02345 MOD 1) ,2) AS col1
,198.02345 (INTEGER) AS col2
,col2 || '-' || col1;

SELECT
TRIM(198.02345) AS nbr
,SUBSTR(nbr ,1,POSITION( '.' IN nbr)-1) AS col1
,SUBSTR(nbr, POSITION('.' IN nbr)+1) AS col2
,col1 || '-' || col2;

***************************

You might also like