November 17, 2017

grep regex command to extract key values from a file

\w in regex is word character (ASCII letter, digit or underscore) 

> grep -o '\bNAME ="\w*"' ./file.xml

Output:

Name = "company"
Name = "phone_extension"
......

> grep -o '\bNAME ="\w*"' ./file.xml | awk '{print $2}' | grep -o '\w*'

Output:
company
phone_extension

File
-----

<TRANSFORMFIELD DATATYPE ="string" DEFAULTVALUE ="" DESCRIPTION ="" NAME ="company" PICTURETEXT ="" PORTTYPE ="INPUT/OUTPUT" PRECISION ="30" SCALE ="0"/>
            <TRANSFORMFIELD DATATYPE ="string" DEFAULTVALUE ="" DESCRIPTION ="" NAME ="phone_extension" PICTURETEXT ="" PORTTYPE ="INPUT/OUTPUT" PRECISION ="10" SCALE ="0"/>
            <TRANSFORMFIELD DATATYPE ="string" DEFAULTVALUE ="" DESCRIPTION ="" NAME ="phone_type" PICTURETEXT ="" PORTTYPE ="INPUT/OUTPUT" PRECISION ="30" SCALE ="0"/>
            <TRANSFORMFIELD DATATYPE ="string" DEFAULTVALUE ="" DESCRIPTION ="" NAME ="pgr_phone" PICTURETEXT ="" PORTTYPE ="INPUT/OUTPUT" PRECISION ="30" SCALE ="0"/>

September 13, 2017

One way of checking if date was formatted well

Date format expected: dd-MMM-yyyy. Example: 03-MAR-2017

WHERE condition:
....
and a_date is not null
and length(a_date ) = 11
and index(a_date , '-') = 3

August 22, 2017

Covert string to valid integer

select cast(coalesce(to_number('1a2'), -1) as int)

July 19, 2017

Inner Join

Will list rows where left and right match

select
emp.id,
emp.name,
dept.name
from employee emp
inner join department dept
on emp.dept_id = dept.dept_id

Will list only those employees who have a department which is found in the dept table.

Right Join

Every rows from right table and matching records from left

select
emp.id,
emp.name,
dept.name
from employee emp
right join department dept
on emp.dept_id = dept.dept_id

Even if the department doesn't have employees, it will be listed. If an employee doesn't have a department, it will not be listed.

Left Join

Every rows from left table and matching records from right

select
emp.id,
emp.name,
dept.name
from employee emp
left join department dept
on emp.dept_id = dept.dept_id

Even if the employee doesn't have a department, he/she will be listed here.

May 17, 2017

Replace

SELECT oreplace('Hello There','Hello','Hi')

This converts Hello There to Hi There.

February 20, 2017

Teradata: Extract month and year from date

 extract (year from date1)

 extract (month from date1)

February 19, 2017

Teradata: Backup table with data

create table table1_bkup as
table1 with data

Teradata: List columns of a table

select
*
from dbc.columns
where tablename ='table1'
and databasename = 'database1'

Teradata: List tables in database

select
*
from dbc.tables
where databasename='database'
and tablekind = 'T'

February 18, 2017

February 15, 2017

February 13, 2017

February 10, 2017

Teradata SQL: Update column name

alter table table1 rename col1 to col1_updated

January 25, 2017

Teradata SQL: Create table using Select statement

Execute following 2 SQLs:

1. create table tablex as
(
select
a,
b,
c
from table1
)
with no data;

2. insert into tablex
select
a,
b,
c
from table1;

January 18, 2017

Teradata recursive sql

Suppose we have a table:
create table accont_tbl
acct_id int,
manager_acct_id int,
name varchar(50)
)
which contains employee records with their supervisor.

Then the recursive sql is:
with recursive mgr_tbl(acct_id, manager_acct_id, mgr_name, depth) as
(
select
a.acct_id,
a.manager_acct_id,
a1.name as mgr_upn,
1 as depth
from account_tbl a
inner join account_tbl a1
on a.manager_acct_id = a1.acct_id
where a.acct_id = 8976
union all
select
mgr_tbl.acct_id,
a.manager_acct_id,
a1.name,
mgr_tbl.depth+1
from mgr_tbl
inner join account_tbl a
on mgr_tbl.manager_acct_id = a.acct_id
inner join account_tbl a1
on a.manager_acct_id = a1.acct_id
-- where mgr_tbl.mgr_upn <> 'email of root if root's manager is same as accout'
)
select * from mgr_tbl order by depth